C++之類,類的數組,一次實例化多個類的實例。


聽說 C++的class比struct高級,但是我經常使用struct的指針,而且用起來很靈活非常強大,就是許多事情做起來要比 類 復雜一些,比如構造函數,析構函數。函數指針賦值 雖然可以模擬成員函數,但是不方便。

所以使用C++的類,但是我有一個疑惑,C++的類可以按照struct那個樣子使用么?

或許我應該說的是 C++的類 與 struct 內存里的結構是一樣的么?

 所以要做個測試。

 測試的內容有:結構體的大小,類的大小;建立類數組,同時初始化多個類實例(這個用法不知道叫什么,我就說是類數組了)

 1 #include <iostream>
2 #include <string.h>
3
4 using namespace std;
5 int id=0;
6
7 class clientRes{
8 public:
9 int clientID;//4
10 int int2;//4
11 void handleClient(void *data){//0000000000
12 cout<<"id="<<clientID<<"HandleClient"<<endl;
13 };
14 clientRes(){//0000000000
15 clientID=id++;
16 }
17 clientRes(int id2){//0000000000000000
18 clientID=id2++;
19 }
20 };
21 struct clientRes2{
22 int clientID;//4
23 int int2;//4
24 int int3;//4
25 void (*handleClient)(void *data);//4
26 void (*clientRes2)(void);//4
27 //void (*~clientRes2)(void);
28 };
29 int main(){
30
31 clientRes * head;
32 void * d=NULL;
33 head=new clientRes[20]();
34 //head=new clientRes[20](20);//classArray.cpp:34: error: ISO C++ forbids initialization in array new
35
36 int i=0;
37 for(;i<30;i++){
38 cout<<"i="<<i<<":";
39 head[i].handleClient(d);
40 }
41 cout<<"類的大小:"<<sizeof(class clientRes)<<endl;//8 "class" 可省略
42 //cout<<"指針大小:"<<sizeof(head)<<endl;//4 指針
43 cout<<"實例大小:"<<sizeof(head[0])<<endl;//8
44
45 struct clientRes2 struct2;
46 cout<<"結構體大小:"<<sizeof(struct clientRes2)<<endl;//20 "struct" 可省略
47 cout<<"結構體實例大小:"<<sizeof(struct2)<<endl;//20
48
49 return 0;
50 }



結果為:

i=0:id=0HandleClient
i=1:id=1HandleClient
i=2:id=2HandleClient
i=3:id=3HandleClient
i=4:id=4HandleClient
i=5:id=5HandleClient
i=6:id=6HandleClient
i=7:id=7HandleClient
i=8:id=8HandleClient
i=9:id=9HandleClient
i=10:id=10HandleClient
i=11:id=11HandleClient
i=12:id=12HandleClient
i=13:id=13HandleClient
i=14:id=14HandleClient
i=15:id=15HandleClient
i=16:id=16HandleClient
i=17:id=17HandleClient
i=18:id=18HandleClient
i=19:id=19HandleClient
i=20:id=50331684HandleClient
i=21:id=0HandleClient
i=22:id=0HandleClient
i=23:id=0HandleClient
i=24:id=0HandleClient
i=25:id=0HandleClient
i=26:id=0HandleClient
i=27:id=0HandleClient
i=28:id=0HandleClient
i=29:id=0HandleClient
類的大小:8
實例大小:8
結構體大小:20
結構體實例大小:20

上面 初始化了20個實例,但是使用了30個實例,這應該是內存溢出吧???奇怪,編譯無論加上-Wall -Werror 全部沒有警告,莫名其妙啊。

上面得到的結果是:

類的大小 不包括 成員函數 析構函數 構造函數。我還沒有測試更多的 private protected呢。


其中對類數組初始化 如果加上參數(2) 是有錯誤的。貌似只能單獨進行構造函數

classArray.cpp: In function ‘int main()’:
classArray.cpp:34: error: ISO C++ forbids initialization in array new

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM