Định nghĩa chồng các phương thức của lớp cơ sở

Một phần của tài liệu ngon_ngu_lap_trinh_c++ (buu chinh vien thong) (Trang 126 - 129)

6.3 TRUY NHẬP TỚI CÁC THÀNH PHẦN TRONG KẾ THỪA LỚP

6.3.3 Định nghĩa chồng các phương thức của lớp cơ sở

Định nghĩa chồng phương thức của lớp cơ sở

Một phương thức của lớp cơ sở bị coi là nạp chồng nếu ở lớp dẫn xuất cũng định nghĩa một

phương thức có cùng tên.

Ví dụ, trong lớp Car, đã có phương thức show(), bây giờ, trong lớp Bus kế thừa từ lớp Car, ta cũng định nghĩa lại phương thức show():

class Car{ …

public: …

void show(); // Phương thức của lớp cơ sở };

class Bus: public Car{ …

public: …

void show(); // Phương thức nạp chồng };

khi đó, phương thức show() của lớp Bus được coi là phương thức nạp chồng từ phương thức

Sử dụng các phương thức nạp chồng

Từ một đối tượng của lớp dẫn xuất, việc truy nhập đến phương thức đã được định nghĩa lại trong lớp dẫn xuất được thực hiện như lời gọi một phương thức thơng thường:

• Đối với biến đối tượng thông thường:

<Tên đối tượng>.<Tên thành phần>([Các đối số]);

• Đối với con trỏ đối tượng:

<Tên đối tượng>-><Tên thành phần>([Các đối số]);

Ví dụ:

Bus myBus; myBus.show();

sẽ gọi đến phương thức show() được định nghĩa trong lớp Bus.

Trong trường hợp, từ một đối tượng của lớp dẫn xuất, muốn truy nhập đến một phương thức của lớp cơ sở (đã bị định nghĩa lại ở lớp dẫn xuất) thì phải sử dụng chỉ thị phạm vi lớp trước phương thức được gọi:

• Đối với biến đối tượng thông thường:

<Tên đối tượng>.<Tên lớp cơ sở>::<Tên thành phần>([Các đối số]);

• Đối với con trỏ đối tượng:

<Tên đối tượng>-><Tên lớp cơ sở>::<Tên thành phần>([Các đối số]);

Ví dụ:

Bus myBus;

myBus.Car::show();

sẽ gọi đến phương thức show() được định nghĩa trong lớp Car từ một đối tượng của lớp Bus. Chương trình 6.4 minh họa việc định nghĩa chồng hàm show() trong lớp Bus và việc sử dụng hai phương thức show() của hai lớp từ một đối tượng của lớp dẫn xuất.

Chương trình 6.4 #include<stdio.h> #include<conio.h> #include<string.h> /* Định nghĩa lớp Car */ class Car{ private: int speed; // Tốc độ char mark[20]; // Nhãn hiệu float price; // Giá xe public:

int getSpeed(); // Đọc tốc độ xe char[] getMark(); // Đọc nhãn xe float getPrice(); // Đọc giá xe

Car(int speedIn=0, char markIn[]=””, float priceIn=0); void show(); // Giới thiệu xe

};

/* Khai báo phương thức bên ngoài lớp */

Car::Car(int speedIn, char markIn[], float priceIn){ speed = speedIn;

strcpy(mark, markIn); price = priceIn;

}

void Car::setSpeed(int speedIn){ // Gán tốc độ cho xe speed = speedIn; } int Car::getSpeed(){ // Đọc tốc độ xe return speed; } char[] Car::getMark(){ // Đọc nhãn xe return mark; }

float Car::getPrice(){ // Đọc giá xe return price;

}

void Car::show(){ // Phương thức giới thiệu xe cout << “This is a ” << mark << “ having a speed of ”

<< speed << “km/h and its price is $” << price << endl; return;

}

/* Định nghĩa lớp Bus kế thừa từ lớp Car */ class Bus: public Car{

int label; // Số hiệu tuyến xe public:

// Khởi tạo đủ tham số

Bus(int sIn=0, char mIn[]=””, float pIn=0, int lIn=0); void show(); // Giới thiệu xe bus

};

// Khởi tạo đủ tham số

Bus::Bus(int sIn, char mIn[], float pIn, int lIn):Car(sIn, mIn, pIn){ label = lIn;

// Định nghĩa nạp chồng phương thức

void Bus::show(){ // Giới thiệu xe bus

cout << “This is a bus of type ” << getMark() << “, on the line “ << label << “, having a speed of ” << getSpeed()

<< “km/h and its price is $” << getPrice() << endl; return;

}

// Chương trình chính void main(){

clrscr();

Bus myBus(80, “Mercedes”, 5000, 27);// Biến đối tượng của lớp Bus cout << “Gioi thieu xe:” << endl;

myBus.Car::show(); // Phương thức của lớp Car cout << “Gioi thieu xe bus:” << endl;

myBus.show(); // Phương thức của lớp Bus return;

}

Chương trình 6.4 sẽ hiển thị các thơng báo như sau:

Gioi thieu xe:

This is a Mercedes having a speed of 80km/h and its price is $5000 Gioi thieu xe bus:

This is a bus of type Mercedes, on the line 27, having a speed of 80km/h and its price is $5000

Lưu ý:

• Trong phương thức show() của lớp Bus, ta phải dùng các hàm get để truy nhập đến các

thuộc tính của lớp Car. Không được truy nhập trực tiếp đến tên các thuộc tính (speed,

mark và price) vì chúng có dạng private của lớp Car.

Một phần của tài liệu ngon_ngu_lap_trinh_c++ (buu chinh vien thong) (Trang 126 - 129)

Tải bản đầy đủ (PDF)

(186 trang)