1. 父類型指針 a = new 子類型; delete a時,父/子類的構造/析構函數時如何調用的?
直接看下面例子:
1 #include <memory> 2 #include <iostream> 3 4 using namespace std; 5 6 class BF{ 7 public: 8 BF(){ cout << "base::base()\n";fun();} 9 virtual ~BF(){cout << "~base::base()\n";fun();}10 virtual void fun(){cout << "base::fun() virtual\n";}11 };12 13 class derive: public BF14 {1517 public:18 derive(){cout << "derive::derive()\n";fun();}19 ~derive(){cout << "~derive::derive()\n";fun();}20 virtual void fun(){cout << "derive::fun() virtual\n";}21 };22 23 int main()24 {25 cout << "-------------------" << endl;26 BF *b = new BF();27 delete b;28 cout << "-------------------" << endl;29 derive *d = new derive();30 delete d;31 cout << "-------------------" << endl;32 BF *bd = new derive();33 delete bd;34 return 0;35 36 }
運行結果:
-------------------
base::base()
base::fun() virtual
~base::base()
base::fun() virtual
-------------------
base::base()
base::fun() virtual
derive::derive()
derive::fun() virtual
~derive::derive()
derive::fun() virtual
~base::base()
base::fun() virtual
-------------------
base::base()
base::fun() virtual
derive::derive()
derive::fun() virtual
~derive::derive()
derive::fun() virtual
~base::base()
base::fun() virtual
結論: 類型A指針 a = new 類型B 時,無論類型A如何,都是調用類型B的構造函數來初始化,delete a時也是調用類型B的析構函數
2. C++創建類對象時(無參)后不加括號與加括號的區別(參考:https://www.cnblogs.com/traeyee/p/4892410.html)
直接看例子:
1 #include<iostream> 2 using namespace std; 3 4 class C{ 5 public: 6 C(){ 7 cout<<"Hello C++\n"; 8 }; 9 C(int m){10 cout<<"I love C++\n";11 };12 private:13 int n;14 };15 16 int main(){17 cout << "-------get parameter------" << endl;18 C a(1);19 cout << "-------get ()------" << endl;20 C b();21 cout << "-------nothing------" << endl;22 C c;23 return 0;24 }
運行結果:
-------get parameter------
I love C++
-------get ()------
-------nothing------
Hello C++
結論:
給參數時,調用相應的構造函數,在棧內存中實例化對象;
只有一個括號時……這尼瑪是聲明了一個返回該類對象的函數;
啥都沒有只有對象名時,調用默認構造函數(如果沒有定義默認構造函數則出錯)。
3. C++中 new 一個對象 時加括號和不加括號的區別
1 #include<iostream> 2 using namespace std; 3 4 class C{ 5 public: 6 C(){ 7 cout<<"Hello C++\n"; 8 }; 9 C(int m){10 cout<<"I love C++\n";11 };12 private:13 int n;14 };15 16 int main(){17 cout << "-------get parameter------" << endl;18 C* a = new C(1);19 cout << "-------get ()------" << endl;20 C* b = new C();21 cout << "-------nothing------" << endl;22 C* c = new C;23 return 0;24 }
運行結果:
-------get parameter------
I love C++
-------get ()------
Hello C++
-------nothing------
Hello C++
結論:
傳入參數時,會調用相應的構造函數;沒有參數時,無論是否加括號,都會調用默認構造函數
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
郵件中的抄送和密送是什么意思?CC和BCC的區別如下:1。抄送是將電子郵件同時發送給收件人以外的其他人。用戶寫的郵件會被復制給他人,對方可以看到用戶的郵件。2. 在密件抄送(BCC)中,只有發送者知道消息被發送給了誰。接收者和抄送者都不知道發送者將消息發送給了誰。然而,接收者知道誰向他發送了消息,消息最初被發送給了誰,并且抄送,但是他不知道消息同時被發送給了誰。3. 例如,a向B1、B2、B3、C...
風暴戰區怎么全屏?見意你不要調全屏了一個窗口你按就開始建還也可以切回來觀看電影不能全屏是怎么回事???f12,你選擇三角符號特殊符號,全屏后選著頻幕,可以修改分辨率設置為自己電腦的顯示器分辨率,不過沒法再次全屏游戲。1280*720的電影該怎么播放?我現在電影可分16:9或1:2.35,1280*720的是16比9的,在現在寬屏顯示器電視看上也可以全屏,1280*536是1比2.35的,上一有黑邊的...
北京到西寧的火車臥鋪票是多少?T175快車北京西-西寧西硬座208元硬臥355/367/379元T151次特快北京西-西寧西硬座238元硬臥401/416/430元T27次特快北京西-西寧西硬座208元硬臥355/367/379元這些都是正常票價,學生半價。北京西始發站14:23西寧航站樓第二天15:232092公里坐臥鋪,安心睡覺,車票由列車員保管,換號換牌子,站前半小時準備好。北京西-西寧的硬...