• 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
  • 相关阅读:
    DP 水题 最长不下降子序列
    数的划分
    水题------纪念品分组
    NY95 众数问题
    NY86 找球号(一)
    C3-Zexal的矩阵链乘
    C3-Zexal的多路流水线调度
    C4-Zexal的食物链
    C4-排列
    C3-炮弹杀伤力
  • 原文地址:https://www.cnblogs.com/ayanmw/p/2434551.html
Copyright © 2020-2023  润新知