听说 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