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?

  1. 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 :slight_smile:

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

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

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

đó 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.

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)
    :smiley:
1 Like
  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.
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?