Chapter 8 - Inheritance

Chia sẻ bởi Vũ Xuân Vinh | Ngày 26/04/2019 | 52

Chia sẻ tài liệu: Chapter 8 - Inheritance thuộc Công nghệ thông tin

Nội dung tài liệu:

NHÓM 16
INHERITANE
2
Nội dung trình bày
Định nghĩa, công dụng và cách khai báo .
Hàm khởi tạo .
Hàm hủy bỏ .
3
Định nghĩa và công dụng

Lập trình hướng đối tượng có hai đặc trưng cơ bản:
• Đóng gói dữ liệu, được thể hiện bằng cách dùng khái niệm lớp để biểu diễn đối tượng với
các thuộc tính private, chỉ cho phép bên ngoài truy nhập vào thông qua các phương thức
get/set.
• Dùng lại mã, thể hiện bằng việc thừa kế giữa các lớp. Việc thừa kế cho phép các lớp thừa
kế (gọi là lớp dẫn xuất) sử dụng lại các phương thức đã được định nghĩa trong các lớp gốc
(gọi là lớp cơ sở).
4
class : {
… // Khai báo các thành phần lớp
};
Khai báo thừa kế
Vì du:
class Bus: public Car{
… // Khai báo các thành phần
};
5
6

#include
#include
using namespace std;
class Nguoi {
private :
string hoten;
int tuoi;
string quequan;
public :
int n;
void nhapNguoi();
void xuatNguoi();
};
class HS : public Nguoi
{
private :
string lop;
string msv;
public :
void nhapHS();
void xuatHS();
};
class DS : public HS
{
private :
HS a[100];
public :
void nhapDS();
void xuatDS();
};

void Nguoi::nhapNguoi()
{
cout<<"Nhap ho ten :” ; cin>>hoten;
cout<<"Nhap tuoi :";
cin>>tuoi;
cout<<"Que quan : ";
cin>>quequan;
}

void Nguoi::xuatNguoi(){
cout<<"Ten : "<void HS::nhapHS(){
nhapNguoi();
n=5;
cout <<"gia tri cua n:" << n <<" ";
cout<<"Ban hoc lop : ";
cin>>lop;
cout<<"Ma sinh vien : ";
cin>>msv; }
void HS::xuatHS(){
xuatNguoi();
cout<<"Hien dang hoc lop : "<7
void DS::xuatDS(){
for(int i=0;i cout<<" Thong Tin Sinh Vien Thu"< a[i].xuatHS();
}
}
int main(){
DS m;
m.nhapDS();
m.xuatDS();
return 0;
}
void DS::nhapDS(){
cout<<"nhap so luong nguoi : ";
cin>>n; //Kế thừa từ lớp Nguoi
for(int i=0;i cout<<" Nhap Thong Tin Sinh Vien Thu "< a[i].nhapHS();
} }
8
Hàm khởi tạo
#include
class car{
private:
float speed ;
char *mark ;
float price ;
public:
char* getmark() ;
car() ;
car(float,char*,float) ;
} ;
car::car() {
speed=0; mark="ben"; price=0; }
car::car(float s,char *mark,float price){
speed=s;
car::mark = mark;
car::price = price; }
char* car::getmark(){
return mark; }
Khi khai báo một đối tượng có kiểu
lớp được dẫn xuất từ một lớp cơ sở
khác .Chương trình sẽ tự động gọi
tới hàm khởi tạo của lớp dẫn xuất .
9
class bus:public car{
private:
char* label ;
public:
bus();
bus(float);
};
bus::bus(float t):car(t,"ford",4000){ // danh sach doi so phu hop
cout < label=getmark ();
// car mycar // mycar.getmark()
cout << label<<" ";}
bus::bus(){
label=getmark();
cout <void main(){
car mycar;
bus mybus(45); }
Khai báo kế thừa từ lớp car
Thứ tự gọi từ hàm khởi tạo lớp cơ sở
đến hàm khởi tạo của lớp dẫn xuất.
10
bus::bus(float t)
{
cout < label=getmark ();
cout << label<<" ";
}
Không có hàm khởi tạo car của lớp cơ sở
class bus:public car{
private:
char* label ;
public:
bus();
bus(float);
};
void main(){
car mycar;
bus mybus(45);
}
Hàm Hủy bỏ trong kế thừa
Khai báo hàm hủy bỏ
::~([]){
… // giải phóng phần bộ nhớ cấp phát cho các thuộc tính bổ sung
}

class Bus: public Car{
char *voyage[]; // mang cac chuoi
public:
~Bus(); //Phải có tầm vực public
Vd:
12
Lưu ý:
1. Khi một đối tượng lớp dẫn xuất bị giải phóng khỏi bộ nhớ, thứ tự gọi các hàm hủy bỏ ngược với thứ tự gọi hàm khởi tạo: gọi hàm hủy bỏ của lớp dẫn xuất trước khi gọi hàm hủy bỏ của lớp cơ sở.
2. Hàm hủy bỏ của lớp dẫn xuất chỉ giải phóng phần
bộ nhớ được cấp phát động cho các
thuộc tính mới bổ sung trong lớp dẫn xuất .

3.Ngay cả khi lớp dẫn xuất không định nghĩa tường
minh hàm hủy bỏ .Chương trình vẫn gọi hàm hủy
bỏ ngầm định của lớp dẫn xuất rồi gọi hàm hủy bỏ của lớp cơ sở .
13
#include
/* Định nghĩa lớp Car */
class Car{
char *mark; // Nhãn hiệu xe
public:
~Car(); // Hủy bỏ tường minh
};
Car::~Car(){ // Hủy bỏ tường minh
delete [] mark;
}
/* Định nghĩa lớp Bus kế thừa từ lớp Car */
class Bus: public Car{
char *voyage[]; // Hành trình tuyến xe
public:
~Bus(); // Hủy bỏ tường minh
};
Bus::~Bus(){ // Hủy bỏ tường minh
delete [] voyage;
}
14
Thank for listening
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Vũ Xuân Vinh
Dung lượng: | Lượt tài: 3
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)