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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

拷贝函数和构造函数

發布時間:2023/11/30 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 拷贝函数和构造函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

類的構造函數:

類的構造函數是類的一種特殊的成員函數,它會在每次創建類的新對象時執行。

構造函數的名稱與類的名稱是完全相同的,并且不會返回任何類型,也不會返回void。

構造函數可用于為某些成員變量初始值。

默認的構造函數是沒有任何參數的,但是如果需要,構造函數也是可以帶參數的。這樣在創建對象時就可以給對象賦初值了。

/*** construct.cpp ***/ #include<iostream> #include<string> using namespace std;class Student {public:Student(string,string,char,int); //構造函數~Student(); //析構函數string name;string number;char X;int year;void print(void); };Student::Student(string N,string n,char x,int y) {name = N;number = n;X = x;year =y; }Student::~Student() {} void Student::print() {cout << name << endl;cout << number <<endl;cout << X << endl;cout << year << endl; }int main() {cout << "please input name : "; string N;cin >> N;cout << "please input StudentID :";string ID;cin >> ID;cout << "please input gender (M or W): ";char x;cin >> x;cout << "please input age : ";int y;cin >> y;Student S(N,ID,x,y);S.print();return 0; }

初始化成員列表的順序時按照聲明的順序初始化的,而不是按照初始化列表的順序進行初始化。

初始化順序最好要按照變量在類聲明的順序一致,如果初始化變量之存在依賴關系,則初始化會順序與變量聲明順序存在差異時則會存在有些變量無法初始化成功。若初始化變量之間沒有值的依賴時,初始化順序與變量聲明順序不同則沒有關系。

?

類的析構函數:

類的析構函數是類的一種特殊的成員函數,它會在每次刪除所創建的對象時執行。

析構函數的名稱與類的名稱是完全相同的,只是在前面加一個波浪號(~) 它不會返回任何值,他不能帶有任何參數。析構函數有助于在跳出程序(比如關閉文件,釋放內存)前釋放資源。

/**** initiate.cpp ***/#include<iostream> using namespace std;class Student1 {public:int a = 0;int b = 0;void fprint(){cout << "a = " << a << " b = " << b << endl;}Student1(){cout << "have no parameter Student1" << endl;}// Student1(int i):b(i),a(b){}; 錯誤初始化順序Student1(int i):a(i),b(a){cout << "have parameter Student1" << endl;}Student1(const Student1& t1){cout << "Copy construct func Student1" << endl;this->a = t1.a;this->b = t1.b;}Student1& operator = (const Student1& t1){cout << "evalute func Student1" << endl;this->a = t1.a;this->b = t1.b;return *this;} }; class Student2 {public:Student1 test;Student2(Student1 &t1){t1.fprint();cout << "E: " << endl;test = t1;}//Student2(Student1 &t1):test(t1); };int main() {cout << "A: ";Student1 A;A.fprint();cout << "B: "; Student1 B(2);B.fprint(); cout << "C; ";Student1 C(B);C.fprint();cout << "D: " << endl;Student2 D(C);D.test.fprint();return 0; }

運行結果:

exbot@ubuntu:~/wangqinghe/C++/func$ ./initiate

A: have no parameter Student1

a = 0? b = 0

B: have parameter Student1

a = 2? b = 2

C; Copy construct func Student1

a = 2? b = 2

D:

have no parameter Student1

a = 2? b = 2

E:?

evalute func Student1

a = 2? b = 2

?

轉載于:https://www.cnblogs.com/wanghao-boke/p/11310826.html

總結

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

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