日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

类中的多种构造函数

發布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 类中的多种构造函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

構造函數術語:

? ??? ??? ??1. 默認構造 : 指的是沒有形參的構造函數, 由編譯器默認提供, 在某些場合編譯器需要自動調用一個類對象的構造函數時, 只能調用默認構造.例如: 子類繼承了父類,當子類對象被構造的時候, 父類 ? ? ? ? ? ? ? ? ? ? 的構造也會被自動調用,此時就只能自動調用父類的默認構造

? ? ? ? ? ? 2.默認構造函數:沒有形參,方法體也是空的,目的是構造一個對象

MyClass.h文件class MyClass{public :MyClass();}; MyClass.cpp文件#include "MyClass.h"MyClass::MyClass(){}

? ? ?2. 轉換構造 : 指的是那些只有一個形參,且參數類型是非本類類型的構造函數們. 一般能夠顯式調用 (例如 `MyClass obj(5)`), 也能隱式調用: `fun(5);` fun的形參是`MyClass`類型?

MyClass.h文件class MyClass{public :MyClass(int i);MyClass(double i);private :double m_Num; }; MyClass.cpp文件#include "MyClass.h"MyClass::MyClass(int i){//構造函數中可以什么都不實現}MyClass::MyClass(double n){//構造函數中也可以實現對成員變量的賦值this->m_Num = n;} main.cpp文件int main(){//創建出MyClass的對象//方法1:MyClass myclass(5);//方法2:MyClass myClass = 5.0;//此時編譯器會將 MyClass myClass = 5.0;裝換成 MyClass myclass(5.0); return 0;}

?3. 拷貝構造: 指的是只有一個形參, 且參數類型是本類類型的引用. 一般是在定義一個對象的時候, 將另一個對象作為初始值時,就會自動調用這個版本的構造函數, 一般編譯器會默認提供一個拷貝 ? ? ? ? ? ? ? ? ?構造, 默認提供的拷貝構造會將對象的內存空間進行拷貝.

MyClass.h文件class MyClass{public :MyClass();MyClass(MyClass& myclass); private:char* cStrName;}; MyClass.cpp文件#include "MyClass.h"MyClass::MyClass(MyClass& myclass){//注意:拷貝構造的形參一定要是對象的引用,如果不是引用那么就會導致拷貝構造不斷調用拷貝構造//當前就為拷貝構造函數//拷貝構造函數被調用的時機//1.當某個函數的形參是MyClass類型時//例: int FunMyClass(MyClass myclass){ }//2.當Myclass對象給另一個MyClass對象賦值時//例: MyClass myClass1;// MyClass myClass2 = myClass1;//3.當函數返回值是MyClass類型時://例: MyClass CreateMyClass(){ MyClass myClass; return myClass;}}MyClass::MyClass(){//無參構造函數}//深拷貝和淺拷貝的區別//1.一般在類中存在指針時就必須使用深拷貝MyClass::MyClass(MyClass& myClass){//淺拷貝 //僅僅進行簡單賦值,將當前指針保存的內存地址賦值給新的對象。如果此時舊對象調用析構,那么舊對象的成員變量指針指向的內存空間也會被釋放,那么這時新對象再去找該空間時就找不到,從而引發程序異常this->cStrName = myClass.cStrName;}//2.深拷貝MyClass::MyClass(MyClass& myClass){//深拷貝時對新指針一定要指向重新創建出的空間,并將舊空間的數據存入新的空間中str_name = _strdup(test.str_name);//_strdup()是string.h中的一個函數,作用是重新創建一塊內存空間,內存空間的大小就是實參的空間大小,并且將值賦值給新創建的內存空間}

?類中包含有指針成員的時候, 一般就需要自己編寫拷貝構造, 實現對指針指向的內存進行拷貝的 ? ? ? ? ? ? ? ? ? ?功能. 否則默認拷貝構造是不會去拷貝指針指向的內容. (深拷貝和淺拷貝的區別)

? ??? ??? ??4. 帶參構造 : 含有兩個以上的形參的構造函數統稱帶參構造.

MyClass.h文件class MyClass{public:MyClass(int i,int j);}; MyClass.cpp文件#include "MyClass.h"MyClass::MyClass(int i ,int j){//帶參構造函數}

?

總結

以上是生活随笔為你收集整理的类中的多种构造函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。