一、類的組合關(guān)系:
1、整體與部分的關(guān)系
組合關(guān)系,從字面上來理解的話,就是誰也離不開誰,必須相互組合在一起才行,例如我們生活當(dāng)中的電腦組成:
代碼示例:
#include <iostream>
#include <string>
using namespace std;
class Memory
{
public:
Memory()
{
cout << "Memory()" << endl;
}
~Memory()
{
cout << "~Memory()" << endl;
}
};
class Disk
{
public:
Disk()
{
cout << "Disk()" << endl;
}
~Disk()
{
cout << "~Disk()" << endl;
}
};
class CPU
{
public:
CPU()
{
cout << "CPU()" << endl;
}
~CPU()
{
cout << "~CPU()" << endl;
}
};
class MainBoard
{
public:
MainBoard()
{
cout << "MainBoard()" << endl;
}
~MainBoard()
{
cout << "~MainBoard()" << endl;
}
};
class Computer // 這個(gè)地方不僅描述了事物,也還描述了關(guān)系,里面只要有一個(gè)類不存在,電腦這個(gè)類也就不復(fù)存在了。
{
Memory mMem;
Disk mDisk;
CPU mCPU;
MainBoard mMainBoard;
public:
Computer()// 這里會(huì)先調(diào)用類成員的構(gòu)造函數(shù),之后調(diào)用電腦類的構(gòu)造函數(shù),這說明了組合關(guān)系;電腦類對(duì)象的創(chuàng)建,要依賴上述四個(gè)類的對(duì)象的創(chuàng)建。
{
cout << "Computer()" << endl;
}
void power()
{
cout << "power()" << endl;
}
void reset()
{
cout << "reset()" << endl;
}
~Computer()// 電腦類析構(gòu)的時(shí)候,也會(huì)將對(duì)應(yīng)的類成員析構(gòu),這說明同生死;說明了電腦類對(duì)象的存在完全依賴于類成員對(duì)象的存在。
{
{
cout << "~Computer()" << endl;
}
};
int main()
{
Computer c;
return 0;
}
運(yùn)行結(jié)果:
root@txp-virtual-machine:/home/txp# ./a.out
Memory()
Disk()
CPU()
MainBoard()
Computer()
~Computer()
~MainBoard()
~CPU()
~Disk()
~Memory()
2、組合關(guān)系的特點(diǎn):
將其它類的對(duì)象作為當(dāng)前類的成員使用
當(dāng)前類的對(duì)象與成員對(duì)象的生命周期相同
成員對(duì)象在用法上與普通對(duì)象完全一致
二、類的繼承關(guān)系:
說到這個(gè)繼承,你可以把它類比成生活當(dāng)中的父親和兒子,兒子繼承的父親的長相特征。那么在我們面向?qū)ο笾欣^的承又是指什么呢?
1、面向?qū)ο笾械睦^承是指類之間的父子關(guān)系
子類擁有父類的所有屬性和行為
子類就是一種特殊的父類
子類對(duì)象可以當(dāng)作父類對(duì)象使用
子類中可以添加父類中沒有的方法和屬性
2、繼承代碼描述形式:
class Parent
{
int mv;
public:
void method()
{
}
};
class Child : public Parent//描述繼承關(guān)系
{
};
代碼示例:
#include <iostream>
#include <string>
using namespace std;
class Parent
{
int mv;
public:
Parent()
{
cout << "Parent()" << endl;
mv = 100;
}
void method()
{
cout << "mv = " << mv << endl;
}
};
class Child : public Parent
{
public:
void hello()
{
cout << "I'm Child calss!" << endl;
}
};
int main()
{
Child c;
c.hello();
c.method();
return 0;
}
運(yùn)行結(jié)果:
root@txp-virtual-machine:/home/txp# ./a.out
Parent()
I'm Child class!
mv= 10
3、繼承規(guī)則:
子類就是一個(gè)特殊的父類
子類對(duì)象可以直接初始化父類對(duì)象
子類對(duì)象可以直接賦值給父類對(duì)象
說明:繼承是c++中代碼復(fù)用的重要手段。通過繼承,可以獲得父類的所有功能,并且可以在子類中重寫已有的功能,或者添加新功能。
代碼示例:
#include <iostream>
#include <string>
using namespace std;
class Memory
{
public:
Memory()
{
cout << "Memory()" << endl;
}
~Memory()
{
cout << "~Memory()" << endl;
}
};
class Disk
{
public:
Disk()
{
cout << "Disk()" << endl;
}
~Disk()
{
cout << "~Disk()" << endl;
}
};
class CPU
{
public:
CPU()
{
cout << "CPU()" << endl;
}
~CPU()
{
cout << "~CPU()" << endl;
}
};
class MainBoard
{
public:
MainBoard()
{
cout << "MainBoard()" << endl;
}
~MainBoard()
{
cout << "~MainBoard()" << endl;
}
};
class Computer
{
Memory mMem;
Disk mDisk;
CPU mCPU;
MainBoard mMainBoard;
public:
Computer()
{
cout << "Computer()" << endl;
}
void power()
{
cout << "power()" << endl;
}
void reset()
{
cout << "reset()" << endl;
}
~Computer()
{
cout << "~Computer()" << endl;
}
};
class HPBook : public Computer
{
string mOS;
public:
HPBook()
{
mOS = "Windows 8";
}
void install(string os)
{
mOS = os;
}
void OS()
{
cout << mOS << endl;
}
};
class MacBook : public Computer
{
public:
void OS()
{
cout << "Mac OS" << endl;
}
};
int main()
{
HPBook hp;
hp.power();
hp.install("Ubuntu 16.04 LTS");
hp.OS();
cout << endl;
MacBook mac;
mac.OS();
return 0;
}
運(yùn)行結(jié)果:
root@txp-virtual-machine:/home/txp# ./a.out
Memory()
Disk()
CPU()
MainBoard()
Computer()
power()
Ubuntu 16.04 LTS
Memory()
Disk()
CPU()
MainBoard()
Computer()
Mac OS
~Computer()
~MainBoard()
~CPU()
~Disk()
~Memory()
~Computer()
~MainBoard()
~CPU()
~Disk()
~Memory()
4、小結(jié):
繼承是面向?qū)ο笾蓄愔g的一種關(guān)系
子類擁有父類的所有屬性和行為
子類對(duì)象可以當(dāng)作父類對(duì)象使用
子類中可以添加父類沒有的方法和屬性
繼承是面向?qū)ο笾写a復(fù)用的重要手段(換句話說,就是不要去寫重復(fù)的代碼,提高工作效率)
三、總結(jié):
好了,今天的分享就到這里,如果文章中有錯(cuò)誤或者不理解的地方,可以交流互動(dòng),一起進(jìn)步。我是txp,下期見!
-
可編程邏輯
+關(guān)注
關(guān)注
7文章
514瀏覽量
44074 -
C++
+關(guān)注
關(guān)注
22文章
2104瀏覽量
73503
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論