Cho mình hỏi đoạn code có dấu : ở public có ý nghĩa gì
?
template <class T, class V>
class myPair {
public :
myPair (T first, V second) :
first(first), second (second) {
// no to do something
}
private:
T first;
V second;
};
Cho mình hỏi đoạn code có dấu : ở public có ý nghĩa gì
?
template <class T, class V>
class myPair {
public :
myPair (T first, V second) :
first(first), second (second) {
// no to do something
}
private:
T first;
V second;
};
Chỉ là cú phafp thôi, để thông báo phần tiếp theo đây là public.
Nhân tiên cho em hỏi dấu “:” ở chỗ myPair ( T first, V second) và nó có giống với có một hàm class SinhVien, lúc t khai báo SinhVien::SV có ngĩa là gì ạ!
myPair (T first, V second) :
first(first), second (second) {
// no to do something
}
gọi constructor có tên myPair, khởi tạo kiểu implicit cho trường this->first với giá trị first, this->second là second.
các thuộc tính và phương thức: myPair, first, second có modifier là public
Cách khởi tạo như vậy gọi là Member Initializer List
Trong c++, để gán giá trị cho biến member có 2 cách:
Ví dụ class Foo:
class Foo
{
public:
Foo();
Foo(in num);
private:
int bar;
}
Member Initialization:
Foo(int num): bar(num) {};
Member Assignment:
Foo(int num)
{
bar = num;
}
Hai hàm khởi tạo về mặt ngữ nghĩa là tương đương với nhau, đều gán biến bar = num
Điểm khác nhau là khi định nghĩa kiểu Member Initialization hàm khởi tạo sẽ chỉ được gọi một lần, việc khởi tạo, gán giá trị cho biến được thực hiện trong một thao tác (operation) duy nhất.
Khi định nghĩa theo kiểu Member Assignment thì đầu tiên sẽ gọi hàm khởi tạo mặc định của class, sau đó mới gán giá trị cho biến bar
==> Sử dụng Member Initialization sẽ nhanh hơn
Cám ơn bác và mọi người, mình hiểu rồi
cái dấu “::” là để khai báo cái SV nằm trong SinhVien bạn ạ
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?