網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
一、生活中的例子
組合關(guān)系∶整體與部分的關(guān)系
下面看一個(gè)組合關(guān)系的描述代碼:
#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;
}
};
int main()
{
Computer c;
return 0;
}
輸出結(jié)果如下:
組合關(guān)系的特點(diǎn)
- 將其它類的對(duì)象作為當(dāng)前類的成員使用
- 當(dāng)前類的對(duì)象與成員對(duì)象的生命期相同
- 成員對(duì)象在用法上與普通對(duì)象完全一致
繼承關(guān)系∶父子關(guān)系
二、驚艷的繼承
面向?qū)ο笾械睦^承指類之間的父子關(guān)系
- 子類擁有父類的所有屬性和行為
- 子類就是一種特殊的父類
- 子類對(duì)象可以當(dāng)作父類對(duì)象使用
- 子類中可以添加父類沒(méi)有的方法和屬性
C++ 中通過(guò)下面的方式描述繼承關(guān)系
下面就來(lái)進(jìn)行繼承的初體驗(yà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;
}
輸出結(jié)果如下:
重要規(guī)則:
- 子類就是一個(gè)特殊的父類
- 子類對(duì)象可以直接初始化父類對(duì)象
- 子類對(duì)象可以直接賦值給父類對(duì)象
三、繼承的意義
繼承是 C++ 中代碼復(fù)用的重要手段。通過(guò)繼承,可以獲得父類的所有功能,并且可以在子類中重寫(xiě)已有功能,或者添加新功能。
下面再來(lái)看一個(gè)繼承的代碼:
#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;
}
輸出結(jié)果如下:
四、小結(jié)
- 繼承是面向?qū)ο笾蓄愔g的一種關(guān)系
- 子類擁有父類的所有屬性和行為
- 子類對(duì)象可以當(dāng)作父類對(duì)象使用
- 子類中可以添加父類沒(méi)有的方法和屬性
- 繼承是面向?qū)ο笾写a復(fù)用的重要手段
原文鏈接:https://blog.csdn.net/weixin_43129713/article/details/124823814
相關(guān)推薦
- 2023-03-20 pip安裝python庫(kù)時(shí)報(bào)Failed?building?wheel?for?xxx錯(cuò)誤的解決方法
- 2022-07-04 python生成單位陣或?qū)顷嚨娜N方式小結(jié)_python
- 2022-04-01 k8s Error: could not find tiller
- 2022-10-31 Golang?template?包基本原理分析_Golang
- 2022-07-12 Linux環(huán)境Jenkins部署
- 2022-07-28 PyTorch實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別的示例代碼_python
- 2022-08-07 C++文件的數(shù)據(jù)寫(xiě)入和文件的數(shù)據(jù)讀取的方法實(shí)現(xiàn)_C 語(yǔ)言
- 2022-10-30 Go中的錯(cuò)誤和異常處理最佳實(shí)踐方法_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支