Dấu : ở public trong C++ Template có ý nghĩa gì

Cho mình hỏi đoạn code có dấu : ở public có ý nghĩa gì :smile: ?

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.

1 Like

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ì ạ!

1 Like
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.

1 Like

các thuộc tính và phương thức: myPair, first, second có modifier là public

1 Like

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

1 Like

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?