網站首頁 編程語言 正文
封閉類
今天,我學習的是C++對象的一種操作.就是成員對象和封閉類.
那么封閉類是什么呢?和普通類用什么不同嗎?
封閉類就是有成員對象的類,那么成員對象是什么呢?我們一起來看一下吧
封閉類分為了輪胎類,引擎類,汽車類......我們可以將封閉類可以看作一個完整的汽車.
那么汽車里面用哪些成員呢,肯定有輪胎對吧,還有引擎,窗戶等等,那么輪胎有什么成員呢?有外層的橡膠,里面的金屬,對吧.輪胎寫成一個對象后,這個輪胎呢是汽車的一部分,而汽車也是一個對象,所以輪胎就是一個成員對象,而汽車呢因為包含了其他對象,就叫做封閉類.
接下來,就可以開始寫程序了.
我們先寫輪胎,輪胎的材質橡膠也可以寫成一個對象,包含著橡膠的大小,尺存什么的.而我要給大家做一個最簡單的例子,就不用寫橡膠,金屬什么的了!這個輪胎是一個圓對吧,圓肯定有半徑吧,寬度/長度吧,還有高啊,都可以寫進去:
輪胎類
#include<bits/stdc++.h>
using namespace std;
class CTyre{ //輪胎類
private:
int redius; //半徑
int width; //寬度或長度
int height; //高度
public:
CTyre(){ //構造函數
redius=0,width=0,height=0; //賦值
}
~CTyre(){ //析構函數
printf("%d %d %d\n",redius,width,height); //類銷毀時輸出這3個成員的值
}
/*
...... 圓的體積
...... 圓的表面積
...... 等等
*/
};
這個就是我寫的其中一個類,輪胎類,里面標注著輪胎的半徑,長,高,還有構造函數和祈構函數,中間省略的部分可以寫這種東西,這個輪胎的作用等等.
寫完了輪胎,還有什么呢?自然就是引擎了,引擎類里面需要有什么成員呢?首先我們要知道這個引擎是否是好的,還要知道這個引擎是不是開啟的,還可以知道這個引擎里面的引擎個數,最后還可以看一下這個引擎的生產公司.
引擎類
#include<bits/stdc++.h>
using namespace std;
class CEngine{ //引擎類
private:
bool use; //是否正在使用
bool good_bad; //這個引擎是好的還是壞的
int parts; //零件的個數
string production; //生產公司的名稱
public:
CEngine(){ //構造函數初始化
use=false;
good_bad=true;
parts=10000; //一般汽車引擎就是這么多零件
production="豐田汽車"; //目前世界上最大汽車公司
}
~CEngine(){ //析構函數
cout<<use<<" "<<good_bad<<" "<<parts<<" "<<production<<endl;
}
/*
...... 這個引擎是否是好的
...... 這個引擎現在在使用嗎?
...... 等等
*/
};
除了引擎和輪胎,汽車肯定還要很多其他的重要部分,由于過于復雜,今天我們就只寫這兩個成員類.
有了引擎和輪胎,就可以有汽車了,汽車里面有什么成員呢?首先,就是這個汽車的價格,然后才是是引擎和輪胎等各種成員類,注意一下,如果是一個成員類的話,構造函數用參數,在寫成員類的時候是不需要加參數的:
汽車類
#include<bits/stdc++.h>
using namespace std;
class CCar{ //汽車類
private:
int price; //汽車的價格
CTyre tyre; //汽車的輪胎
CEngine engine; //汽車的引擎
public:
CCar(int p){//構造函數
price=p; //賦值
}
~CCar(){ //析構函數
printf("%d\n",price); //只用輸出這個價格
} //因為輪胎和引擎類消亡后會自動使用祈構函數
};
這個CCar就是我們的封閉類了,里面有著引擎和輪胎兩個成員對象.
現在我講一下寫封閉類的注意事項:
1.任何生成封閉類的語句,都要讓編譯器明白,對象中的成員對象,是如何進行初始化的.
2.封閉類對象生成時,先執行所有對象成員的構造函數,然后才執行封閉類自己的構造函數.
3.對象成員的構造函數調用次序和對象成員在類中的說明次序一致.
4.和構造函數正好相反,當封閉類對象消亡時,先執行封閉類的析構函數,然后再執行成員對象的析構函數.調用次序也和構造函數的調用次序相反.
總代碼
#include<bits/stdc++.h>
using namespace std;
class CEngine{ //引擎類
private:
bool use; //是否正在使用
bool good_bad; //這個引擎是好的還是壞的
int parts; //零件的個數
string production; //生產公司的名稱
public:
CEngine(){ //構造函數初始化
use=false;
good_bad=true;
parts=10000; //一般汽車引擎就是這么多零件
production="豐田汽車"; //目前世界上最大汽車公司
}
~CEngine(){ //析構函數
cout<<use<<" "<<good_bad<<" "<<parts<<" "<<production<<endl;
}
/*
...... 這個引擎是否是好的
...... 這個引擎現在在使用嗎?
...... 等等
*/
};
class CTyre{ //輪胎類
private:
int redius; //半徑
int width; //寬度或長度
int height; //高度
public:
CTyre(){ //構造函數
redius=0,width=0,height=0; //賦值
}
~CTyre(){ //析構函數
printf("%d %d %d\n",redius,width,height); //類銷毀時輸出這3個成員的值
}
/*
...... 圓的體積
...... 圓的表面積
...... 等等
*/
};
class CCar{ //汽車類
private:
int price; //汽車的價格
CTyre tyre; //汽車的輪胎
CEngine engine; //汽車的引擎
public:
CCar(int p){//構造函數
price=p; //賦值
}
~CCar(){ //析構函數
printf("%d\n",price); //只用輸出這個價格
} //因為輪胎和引擎類消亡后會自動使用祈構函數
};
int main(){
CCar a(10000);
}
程序輸出:
原文鏈接:https://blog.csdn.net/wo_ai_luo_/article/details/127638588
相關推薦
- 2022-09-15 Python淺析匿名函數lambda的用法_python
- 2022-04-06 Android中卡頓優化布局詳細介紹_Android
- 2022-07-12 linux中刪除指定文件以外的其它所有文件
- 2022-06-25 python格式化輸出實例(居中、靠右及靠左對齊)_python
- 2022-08-12 C#實現簡單的字符串加密_C#教程
- 2022-05-24 Python?6種基本變量操作技巧總結_python
- 2022-11-28 如何將python代碼生成API接口_python
- 2022-10-10 react使用axios實現上傳下載功能_React
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支