拷贝函数和构造函数
類的構(gòu)造函數(shù):
類的構(gòu)造函數(shù)是類的一種特殊的成員函數(shù),它會(huì)在每次創(chuàng)建類的新對(duì)象時(shí)執(zhí)行。
構(gòu)造函數(shù)的名稱與類的名稱是完全相同的,并且不會(huì)返回任何類型,也不會(huì)返回void。
構(gòu)造函數(shù)可用于為某些成員變量初始值。
默認(rèn)的構(gòu)造函數(shù)是沒(méi)有任何參數(shù)的,但是如果需要,構(gòu)造函數(shù)也是可以帶參數(shù)的。這樣在創(chuàng)建對(duì)象時(shí)就可以給對(duì)象賦初值了。
/*** construct.cpp ***/ #include<iostream> #include<string> using namespace std;class Student {public:Student(string,string,char,int); //構(gòu)造函數(shù)~Student(); //析構(gòu)函數(shù)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; }初始化成員列表的順序時(shí)按照聲明的順序初始化的,而不是按照初始化列表的順序進(jìn)行初始化。
初始化順序最好要按照變量在類聲明的順序一致,如果初始化變量之存在依賴關(guān)系,則初始化會(huì)順序與變量聲明順序存在差異時(shí)則會(huì)存在有些變量無(wú)法初始化成功。若初始化變量之間沒(méi)有值的依賴時(shí),初始化順序與變量聲明順序不同則沒(méi)有關(guān)系。
?
類的析構(gòu)函數(shù):
類的析構(gòu)函數(shù)是類的一種特殊的成員函數(shù),它會(huì)在每次刪除所創(chuàng)建的對(duì)象時(shí)執(zhí)行。
析構(gòu)函數(shù)的名稱與類的名稱是完全相同的,只是在前面加一個(gè)波浪號(hào)(~) 它不會(huì)返回任何值,他不能帶有任何參數(shù)。析構(gòu)函數(shù)有助于在跳出程序(比如關(guān)閉文件,釋放內(nèi)存)前釋放資源。
/**** 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){}; 錯(cuò)誤初始化順序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; }運(yùn)行結(jié)果:
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
?
轉(zhuǎn)載于:https://www.cnblogs.com/wanghao-boke/p/11310826.html
總結(jié)
 
                            
                        - 上一篇: 金凤花开剧情介绍
- 下一篇: 成都欢乐谷需要带身份证吗
