文章目錄 1.構造函數一般方式 2.初始化列表方式,構造函數 3.委托構造函數 4.析構函數 5.淺拷貝 6.深拷貝 7.移動構造
1.構造函數一般方式
2.初始化列表方式,構造函數
3.委托構造函數
4.析構函數
5.淺拷貝
6.深拷貝
7.移動構造
# include <iostream>
# include <string> using namespace std; class stu {
public : string name; int age; stu ( ) { cout << "無參構造" << endl; } stu ( string name) { cout << "有參構造1" << endl; } stu ( string name, int age) { cout << "有參構造2" << endl; }
} ; class teacher {
public : string name; int age; teacher ( string name, int age) : name ( name) , age ( age) { cout << "有參構造" << endl; }
} ; class school {
public : string name; int age; school ( ) : name{ "希望小學" } , age ( 30 ) { } ; school ( string name) : school{ name, 100 } { } ; school ( string name, int age) : name{ name} , age{ age} { } ; } ; class stu2 {
public : string name; int age; stu2 ( string name, int age) { cout << "有參構造" << endl; } ~ stu2 ( ) { cout << "析構函數" << endl; }
} ; class stu3 {
public : string name; int age; stu3 ( string name, int age) : name ( name) , age ( age) { cout << "有參構造" << endl; } stu3 ( const stu3 & s) { cout << "調用拷貝構造```" << endl; name = s. name; age = s. age; } ~ stu3 ( ) { cout << "析構函數" << endl; }
} ; class hospital {
public : string name; string * address; hospital ( string name, string * address) : name ( name) , address ( address) { cout << "拷貝構造" << endl; } hospital ( const hospital & h) { cout << "調用拷貝構造" << endl; name = h. name; if ( address== nullptr ) { address = new string; address = h. address; } } ~ hospital ( ) { cout << "調用析構函數" << endl; if ( address != nullptr ) {
address = nullptr ; } }
} ; class lecturer {
public : string * name; lecturer ( ) : name ( new string ( "豆花" ) ) { cout << "執行構造函數lecturer" << endl; } lecturer ( const lecturer & le) : name ( new string ( * le. name) ) { cout << "拷貝構造函數~" << endl; } lecturer ( lecturer && lec) : name ( lec. name) { cout << "移動構造lec" << endl; lec. name = nullptr ; } ~ lecturer ( ) { cout << "析構函數lecture" << endl; delete name; }
} ; lecturer getLec ( ) { lecturer ll; return ll;
} int main ( ) { stu s; stu s2 ( "小明" ) ; stu s3 ( "小紅" , 18 ) ; teacher t ( "王老師" , 38 ) ; school sc; school sc2 ( "豆花" ) ; stu2 * s21 = new stu2 ( "小明" , 18 ) ; delete s21; stu3 s31 ( "小麗" , 12 ) ; stu3 s32 = s31; cout << s32. name << s32. age << endl; string address = "北京路" ; hospital h1 ( "協和醫院" , & address) ; hospital h2 = h1; * h1. address = "上海路" ; lecturer ll = getLec ( ) ; return 0 ;
}