Professional Documents
Culture Documents
SmartDir
Thuộc tính:
Dung tích xi lanh
Truy nhập các thành phần của lớp cơ sở từ lớp dẫn xuất
Các thành phần private trong lớp cơ sở ko thể truy nhập được từ
các lớp dẫn xuất. Ví dụ x,y của point ko thể được dùng colorpoint
Lớp dẫn xuất được phép truy nhập đến các hàm thành phần
protected và public trong lớp cơ sở.
Dẫn xuất protected: các thành phần public, protected trong lớp cơ sở trở
thành các thành phần protected trong lớp dẫn xuất.
Đ/N lại các hàm thành phần của lớp cơ sở trong lớp dẫn xuất
Hàm display() đã đ/n trong lớp point nhưng được đ/n lại trong
lớp colorpoint. Lúc này có hai phiên bản khác nhau của
display() tồn tại trong lớp colorpoint (point::display() và
colorpoint::display())
Trong phạm vi lớp dẫn xuất hàm thứ hai che lấp hàm thứ nhất
Đ/n lại hàm thành phần khác với đ/n chồng hàm thành phần:
Hàm đ/n lại và hàm bị định nghĩa lại giống hệt nhau về tên, kiểu trả về và
tham số, chúng chỉ khác nhau về vị trí, một hàm đặt ở lớp dẫn xuất và
một hàm đặt ở lớp cơ sở
Thuộc tính:
Tên
Số lượng trong kho
Giá mua
Giá bán
Phương thức
Tínhlãi()
mua(n)
bán(n)
Sử dụng hàm ảo
Chương 4: Dẫn xuất và kế thừa trong C++ 22
4.2.1 Hàm ảo và tính đa hình
Ví dụ:
class coloredpoint : public point{
Class point {
int color;
float x,y; coloredpoint() : point() {color=0;}
public: void display(){
point(){ x=0;y=0; }; point::display();
point(float ox, float oy){ cout<<color;
}
x=ox; y=oy;
coloredpoint(float ox, float oy, int c):
}; point(ox,oy) {
virtual void display(){ color=c;
cout<<x<<y; }
} };
};
Đặc điểm:
Không có đối tượng nào của môt lớp trừu tượng được
khai báo (tức không sử dụng lớp trừu tượng để khai báo
các biến)
Một hàm ảo thuần túy khai báo trong lớp trừu tượng
phải được định nghĩa lại trong một lớp dẫn xuất hoặc
nếu không thì phải được tiếp tục khai báo ảo trong lớp
dẫn xuất
class Menu
OptionList object Window object Menu object : public OptionList, public Window {
OptionList public:
Window OptionList
data members
data members data members Menu (int n, Rect &bounds);
~Menu (void);
Window
//...
data members };
Menu Menu::Menu (int n, Rect &bounds) :
data members
OptionList(n), Window(bounds)
{ /* ... */ }
Chương 4: Dẫn xuất và kế thừa trong C++ 28
Sự mơ hồ trong đa thừa kế
void main() {
Gọi void main() {
hàm xử lý Menu m1(….);
Menu m1(….);
của lớp m1.OptionList::Highlight(10);
nào ? m1.Highlight(10);
m1.Window::Highlight(20);
….
….
}
}
Trong đa kế thừa:
Các hàm thiết lập được gọi theo thứ tự xuất hiện trong
danh sách khai báo các lớp cơ sở.
Sau đó đến hàm thiết lập của lớp dẫn xuất.
Với lớp cơ sở ảo: hàm thiết lập của một lớp ảo luôn
được gọi trước các hàm thiết lập khác.