30/09/2018, 17:10

[C++] Hai thắc mắc trong class

Em thấy nhiều chỗ người ta khởi tạo các giá trị mặc định cho 1 class như sau:

`foo(int _val) : val(_val) {}`

Vậy đây có phải là một hàm không ạ? Tại sao người ta dùng nó mà lại không dùng hàm constructor bình thường?

2.Trong hàm, em thấy người ta toàn khai báo tham số theo kiểu tham biến chứ không phải là con trỏ, tại sao thế ạ?
Từ đấy gợi ý giùm em cái luôn là lúc nào nên dùng tham biến, lúc nào nên dùng con trỏ?

Em xin cảm ơn trước

Thu Thuỷ viết 19:18 ngày 30/09/2018

ko có kiểu trả về thì chắc là hàm khởi tạo

constructor bình thường

constructor bình thường là sao nhỉ ta?

khai báo tham số theo kiểu tham biến chứ không phải là con trỏ

truyền 1 biến có 3 loại: tham trị, tham chiếu, con trỏ

Minh Hoàng viết 19:10 ngày 30/09/2018

foo(int _val) : val(_val) {}

đó chính là hàm constructor luôn đó bạn, :val(_val) dùng để truyền trực tiếp vào class luôn.

Gió viết 19:23 ngày 30/09/2018

Mình nghĩ là khác nhau ở chỗ 1 bên là copy constructor , 1 bên là bằng operator =
Sau đây là ví dụ:


#include <iostream>
using namespace std;

class Foo{
public:
  Foo(){}
  Foo(const Foo& f){ 
      cout<<"Oh! You call deep copy\n";
  }
  Foo &operator=(const Foo& f){
      cout<<"Oop! You call shallow copy\n";
      return *this;
  }
};
class Bar{
public:
       Foo f;
       Bar( Foo & _f){ f=_f; }
       
};

int main() {
      Foo f;
      Bar b(f);
      // Oop! ....
      return 0;
}
  • Theo code trên thì nó sẽ gán f = _f qua operator =
  • Nếu class theo cách của bạn thì chỉ ra “Oh!..”. Cách này f ( _f ) tương đương với f là object dc tạo thông qua constructor Foo(_f)
huong viết 19:11 ngày 30/09/2018
  1. Day la contructor trong class ban a.
  2. Kieu truyen tham so nay dung khi class co thua ke hoac su dung mot doi tuong khac lam thuoc tinh.
Bài liên quan
0