在c++中,struct可以同class一樣擁有自己的成員,只不過struct成員的預設訪問的是public範圍。如果在struct中定義了建構函式,則預設建構函式(無參建構函式)必須顯式定義才能使用(隱式構造方法是編譯器自動給出的,顯式構造方法是程式設計師自己定義的)。否則,在建立此結構體的例項的時候,會出現編譯錯誤
struct test;
test* test=new test;//結構體使用預設建構函式,編譯通過
struct test1
int _a;
}struct test2;
test2* test2=new test2;//結構體test1沒有顯式定義無參建構函式,呼叫失敗,編譯無法通過
test1中沒有顯式定義的無參建構函式,而生成例項的方法卻呼叫的是無參構造。
解決方法有:
為test1定義預設建構函式
將test1資料成員宣告為指標型別(此時test2結構體中儲存的是test1的4位元組位址,不需要呼叫test1的建構函式)。
//提供預設建構函式
struct test1
test1(int a):_a(a){}
int _a;
};//資料成員宣告為指標
struct test2;
struct和class的關係
一 預設繼承許可權。如果不明確指定,來自class的繼承按照private繼承處理,來自struct的繼承按照public繼承處理 二 成員的預設訪問許可權。class的成員預設是private許可權,struct預設是public許可權。除了這兩點,class和struct基本就是乙個東西。語法上...
struct和class的區別
1.值型別與引用型別 結構是值型別 值型別在堆疊上分配位址,所有的基型別都是結構型別,例如 int 對應system.int32 結構,string 對應 system.string 結構 通過使用結構可以建立更多的值型別 類是引用型別 引用型別在堆上分配位址 堆疊的執行效率要比堆的執行效率高,可是...
class和struct的區別
從語法上,在c 中 只討論c 中 class和struct做型別定義時只有兩點區別 一 預設繼承許可權。如果不明確指定,來自class的繼承按照private繼承處理,來自struct的繼承按照public繼承處理 二 成員的預設訪問許可權。class的成員預設是private許可權,struct預...