III. DẠNG PHIẾU.
1. Con trỏ đối tượng và các phương thức tĩnh
Giả sử có 3 lớp A, B, C kế thừa nhau theo cây thứ bậc sau:
Tức lớp B kế thừa lớp A, Lớp C lại kế thừa trực tiếp lớp B.
A B C
Nếu ta khai báo một con trỏđối tượng P thuộc lớp A (A * P) thì: P có thể chứa địa chỉ của các đối tượng thuộc lớp A hoặc B hoặc C.
VD: Ta khai báo: A a, *P; B b; C c; thì ta có thể viết: P = &a; hoặc P = & b; hoặc P = & c;
Xét trường hợp cả 3 lớp A, B, C đều có cùng một phương thức: cùng tên, cùng danh sách các đối, chỉ khác nhau về nội dung phương thức. Khi đó, nếu ta viết: P
<Tên phương thức>; thì phương thức nào trong 3 phương thức của 3 lớp sẽ được gọi?
Câu trả lời là: Chỉ có phương thức của lớp A sẽđược gọi, cho dù P có trỏ tới đối tượng thuộc lớp B và C.
VD: Xét đoạn trình mô tả 3 lớp A, B, C kế thừa nhau theo cây thứ bậc trên. Cả 3 lớp đều có phương thức giống nhau là phương thức nhap().
class A { int a; public: void nhap() { cout<<"Nhap a "; cin>>a; } }; class B: public A { int b; public: void nhap() {
cout<<" Nhap b "; cin>>b; } }; class C: public B { int c; public: void nhap() {
cout<<" Nhap c "; cin>>c; }
};
Tại hàm main(), ta khai báo 3 đối tượng thuộc 3 lớp A, B, C và một con trỏ p thuộc lớp A. Khi đó, mặc dù p trỏ tới đối tượng của lớp B, C những khi viết p
nhap() thì phương thức nhap() của lớp A vẫn được gọi. void main()
{
A d1, *p; B d2; C d3;
p = & d2;
p->nhap();//van la phuong thuc nhap() cua lop A p = & d3;
p->nhap();//van la phuong thuc nhap() cua lop A }