30/09/2018, 17:11

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ì ?

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;
};
Mai Anh Dũng viết 19:27 ngày 30/09/2018

Chỉ là cú phafp thôi, để thông báo phần tiếp theo đây là public.

Hoan Sò viết 19:17 ngày 30/09/2018

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

... viết 19:26 ngày 30/09/2018
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.

Truong Pham viết 19:27 ngày 30/09/2018

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

Coulson viết 19:21 ngày 30/09/2018

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

Lượng Nguyễn viết 19:14 ngày 30/09/2018

Cám ơn bác và mọi người, mình hiểu rồi

Lượng Nguyễn viết 19:23 ngày 30/09/2018

cái dấu “::” là để khai báo cái SV nằm trong SinhVien bạn ạ

Bài liên quan
0