[Hỏi] ý nghĩa ký tự : sau tham số truyền vào của một hàm trong C++
Cho mình hoi chút, ở ham Useless::Useless(int k) : n(k){…} thì dấu “:” nghĩa là gì ạ?
using namespace std;
// interface
class Useless {
private:
int n; // number of elements
char *pc; // pointer to data
static int ct; // number of objects
void ShowObject() const;
public:
Useless();
explicit Useless(int k);
Useless(int k, char ch);
Useless(const Useless &f); // regular copy constructor
Useless(Useless &&f); // move constructor
~Useless();
Useless operator+(const Useless &f) const;
// need operator=() in copy and move versions
void ShowData() const;
};
// implementation
int Useless::ct = 0;
Useless::Useless() {
++ct;
n = 0;
pc = nullptr;
cout << "default constructor called; number of objects: " << ct << endl;
ShowObject();
}
Useless::Useless(int k) : n(k) {
++ct;
cout << "int constructor called; number of objects: " << ct << endl;
pc = new char[n];
ShowObject();
}
là để khởi tạo giá trị của n trước khi vào trong thân hàm khởi tạo (ctor).
Nếu viết là
thì cũng có tác dụng tương tự, nhưng trước khi n được gán = k thì n đã được khởi tạo với giá trị mặc định của
int
là0
rồi.khởi tạo trước khi vào thân hàm là gọi đúng hàm khởi tạo của biến đó, còn vào thân hàm mới gán biến đó vào thì là gọi copy ctor rồi. Ví dụ có 1 class A, hàm khởi tạo của A nhân 2 số là x, y. A cũng có hàm khởi tạo mặc định, gán x=0, y=0. Class B chứa 1 đối tượng của class A:
gọi trực tiếp tốt hơn. Nếu class B kế thừa từ class A thì ko có object a mà gán a = A(x,y) trong thân hàm được nữa, mà phải gọi ở trước thân hàm:
Camr ơn bạn, bạn giải thích rất dễ hiểu