網站首頁 編程語言 正文
構造函數的調用
默認情況下編譯器至少給一個類添加3個函數
1.默認構造函數(無參,函數體實現)--完成對象的初始化
2.默認析構函數(無參,函數體為空)--完成對象的清理
3.默認拷貝構造函數,屬性進行值拷貝
規則:
如果用戶定義了有參構造,c++不會提供無參構造,但是提供默認拷貝構造
如果用戶定義了拷貝構造函數,c++不會在提供其他函數
類名(){}
構造函數的語法
1,沒有返回值,也不寫void;
2,函數名稱與類名相同;
3,構造函數可以有參數,因此可以發生重載;
4,程序在調用對象時會自動調用構造函數,無需手動調用且只調用一次
析造函數~類名()
1.析造函數,沒有返回值也不寫void
2.函數名稱與類名相同在前面加上~
3.構造函數不可以有參數,因此不可以發生重載
4.程序在對象銷毀會自動調用析構,與構造函數的調用規則相同
構造函數的分類及調用
1.按照參數分類為 無參構造和 有參構造
class person
{
public:
person()
{
cout<<"無參構造的調用"<<endl;
}
person(int a)
{
cout<<"有參構造的調用"<<endl;
}
};
2.按照類型分為 普通構造和 拷貝構造
person(const person& p)
{
}
拷貝構造的語法
調用構造函數的方法
void test()
{
//1.括號法
person p1;//默認無參構造調用
person p2(10);//默認有參構造的調用
preson p3(p2);//拷貝構造的調用;
//若是這樣寫 下面這行代碼會被認為是編譯器的聲明
person p1(); // void func();
// 無法完成函數的調用
2.顯示法
person p1;
person p2=person(10);
person p3=person(p2);
// 匿名對象
person(10);//特點:當前行執行結束后,系統會立即回收匿名對象
// 3.隱式轉換法
person p4=10;// 相當于 寫了 person p4 =person(10);
person p5=p4;
}
拷貝構造的調用時機
1.使用一個已經創建完畢的對象來初始化一個新對象
2.值傳遞的形式給函數參數傳值
class p
{
};
void dowork(person p )//形參p
{
}
void test02()
{
person p;
dowork(p);// 相當于發生了隱式類型轉換 傳入值拷貝 person p=p;
}
3.值方式返回局部對象
深拷貝與淺拷貝
如果利用編譯器提供的拷貝構造函數
會做淺(值)拷貝的操作(會使得new的對象指針指向同一個地址),會帶來對堆區內存持續釋放的問題
如果堆區開辟了內存,可以在析構函數中釋放;
對于拷貝構造函數,可以自己實現一個拷貝構造函數(深拷貝)(new一個新的對象實現拷貝構造)
總結: 如果屬性有在堆區開辟,一定要自己提供拷貝構造函數,防止淺拷貝帶來的問題
初始化列表
c++提供了初始化列表語法用來初始化屬性
class person
{
person(int a,int b,int c):m_a(a),m_b(b),m_c(c);
{
}
int m_a;
int m_b;
int m_c;
};
原文鏈接:https://blog.csdn.net/m0_63515013/article/details/123507346
相關推薦
- 2022-10-05 redis復制集群搭建的實現_Redis
- 2022-10-06 Iptables防火墻connlimit與time模塊擴展匹配規則_安全相關
- 2022-07-13 this.static.super關鍵字
- 2022-05-08 python函數裝飾器構造和參數傳遞_python
- 2022-12-06 Python基礎之文件操作及光標移動詳解_python
- 2022-07-31 Python加密與解密模塊hashlib與hmac_python
- 2022-05-13 this.$route.params獲取不到
- 2022-01-22 C++四種強制類型轉換
- 最近更新
-
- 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同步修改后的遠程分支