Sử dụng các thành phần của lớp cơ sở từ lớp dẫn xuất

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

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

6.3.2 Sử dụng các thành phần của lớp cơ sở từ lớp dẫn xuất

Từ bảng tổng kết phạm vi truy nhập, ta thấy rằng chỉ có dẫn xuất theo kiểu public thì đối tượng của lớp dẫn xuất mới có thể truy nhập đến các thành phần (thuộc loại public) của lớp cơ sở. Khi

đó, việc gọi đến các thành phần của lớp cơ sở cũng tương tự như gọi các thành phần lớp 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ố]);

Lưu ý:

• Cách gọi hàm thành phần này được áp dụng khi trong lớp dẫn xuất, ta không định nghĩa lại các hàm thành phần của lớp cơ sở. Trường hợp định nghĩa lại hàm thành phần của lớp cơ sở sẽ được trình bày trong mục 6.3.3.

Chương trình 6.3 minh họa việc sử dụng các thành phần lớp cơ sở từ đối tượng lớp dẫn xuất: lớp Bus kế thừa từ lớp Car. Lớp Bus có định nghĩa bổ sung một số phương thức và thuộc tính mới. Khi đó, đối tượng của lớp Bus có thể gọi các hàm public của lớp Bus cũng như của lớp Car.

Chương trình 6.3 #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:

void setSpeed(int); // Gán tốc độ cho xe int getSpeed(); // Đọc tốc độ xe

void setMark(char); // Gán nhãn cho xe char[] getMark(); // Đọc nhãn xe

void setPrice(float); // Gán giá cho xe float getPrice(); // Đọc giá xe

// Khởi tạo thông tin về 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;

}

void Car::setMark(char markIn){ // Gán nhãn cho xe strcpy(mark, markIn);

}

char[] Car::getMark(){ // Đọc nhãn xe return mark;

}

void Car::setPrice(float priceIn){ // Gán giá cho xe price = priceIn;

}

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 ”

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 setLabel(int); // Gán số hiệu tuyến xe

int getLabel(); // Đọc số hiệu tuyến xe };

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

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

}

void Bus::setLabel(int labelIn){ // Gán số hiệu tuyến xe label = labelIn;

}

int Bus::getLabel(){ // Đọc số hiệu tuyến xe return label;

}

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

clrscr();

Bus myBus; // Biến đối tượng của lớp Bus int speedIn, labelIn;

float priceIn; char markIn[20];

// Nhập giá trị cho các thuộc tính cout << “Toc do xe bus:”;

cin >> speedIn;

cout << “Nhan hieu xe bus:”; cin >> markIn;

cout << “Gia xe bus:”; cin >> priceIn;

cout << “So hieu tuyen xe bus:”; cin >> labelIn;

myBus.setMark(markIn); // Phương thức của lớp Car myBus.setPrice(priceIn); // Phương thức của lớp Car myBus.setLabel(labelIn); // Phương thức của lớp Bus myBus.show(); // Phương thức của lớp Car return;

}

Trong chương trình 6.3, đối tượng myBus có kiểu lớp Bus, là lớp dẫn xuất của lớp cơ sở Car, có thể sử dụng các phương thức của lớp Car và lớp Bus một cách bình đẳng. Khi đó, lệnh myBus.show() sẽ gọi đến phương thức show() của lớp Car, do vậy, chương trình trên sẽ in ra màn hình kết quả như sau (tùy theo dữ liệu nhập vào ở 4 dòng đầu):

Toc do xe bus: 80

Nhan hieu xe bus: Mercedes Gia xe bus: 5000

So hieu tuyen xe bus: 27

This is a Mercedes having a speed of 80km/h and its price is $5000

Trong dịng giới thiệu xe bus (vì ta đang dùng đối tượng myBus của lớp Bus), khơng có giới thiệu số hiệu tuyến xe. Lí do là vì ta đang dùng hàm show của lớp Car. Muốn có thêm phần giới thiệu về số hiệu tuyến xe buýt, ta phải định nghĩa lại hàm show trong lớp Bus. Mục 6.3.3 sẽ trình bày nội dung này.

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

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

(186 trang)