ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

C++的聚合和非聚合类,类的初始化

C++的聚合和非聚合类,类的初始化 其实类也分类类分为两种一种是聚合类就是没有自定义构造函数的类就算你写默认构造函数也算自定义这种聚合类初始化可以用结构体的花括号方法初始化初始化过程叫在聚合类初始化第二个类就是非聚合类就是类有自定义函数不能聚合初始化此时非聚合类初始化只能用构造函数类的成员在类的初始化有三种方法聚合类初始化非聚合类构造函数给成员初始化C11后的初始化1.聚合类构造函数给成员初始化非聚合类满足有四个条件1.类没有自定义构造函数自己手写默认构造函数也算自定义2.没有保护和私有的非静态成员非静态成员就是没有加static的成员3.没有虚函数4.这个类没有基类没有基类的意思就是这个类没有父类父类就是基类意思派生类就是子类意思class student{public //第二个条件没有保护和私有的非静态成员int age //第一个条件没有自定义构造函数int sno //第三四个条件没有继承和虚函数}int main(){student a{1010086blue}; //聚合类创建对象初始化就像结构体一样间接定义变量花括号赋值studrnt a{10,10086,blude}; //聚合初始化不带等于就花括号也可以return 0; //注意成员顺序大括号里的值必须和类里面成员声明顺序一一对应}关于C聚合类的知识点1.聚合是一个数据类型的名词就是聚合类型聚合类型有三个 一个是数组 一个是满足四个条件的聚合类一个是C语言的结构体C语言结构体是聚合类的一种当然满足四个条件的聚合类和C语言结构体是属于同一类不属于数组那一类我只是便于区分想起2.只要是聚合类型创建对象都可以用等于加花括号初始化并且都不调用构造函数聚合创建对象初始化虽然说要带等于和花括号秒其实不带等于也可以所以数组和聚合类结构体3.同时结构体为什么也能用等于花括号初始化因为他也算聚合类型4.但是反过来等于和花括号在代码里面不一定就是聚合类型的初始化在C11标准里面非聚合类创建对象也可以用等于和花括号初始化2.非聚合类构造函数给成员初始化非聚合类初始化只能用构造函数a.age100,那叫赋值非聚合类初始化有两种第一种构造函数初始化列表初始化第二种C11后的定义变量处初始类的赋值有四种第一种在构造函数里面直接给变量赋值第二种在自定义函数里面直接给变量赋值第三种类外部用点运算符或者箭头运算符第四种在其他特殊成员函数里面但是不能直接把赋值干巴巴写在类里面说白了非聚合类构造函数在类里面的初始化就只有初始化列表有值还有一个构造函数体内赋值还有个C11后3.C11后的初始化类的成员在定义变量的时候初始化必须是C11标准才可以如class student{publicint age 18 //直接给成员初始化但是这种方法只有在C11标准才可以int sno10086privateint func(){coutreturn 0;}}我们可以用构造函数成功初始化类这个类的初始化是在类里面就是直接所有成员初始化这是直接初始化那我想间接从类外面给类的任何权限成员初始化或者赋值呢甚至给私有成员初始化赋值保护和私有无法直接访问但是可以通过访问类的构造函数和自定义函数对里面私有和保护成员访问可以理解成只要先跑进了公有里面理论上可以对类的私有和保护进行间接访问一般通过跑到公有的构造和自定义函数成员权限只是针对于直接权限通过函数调用是间接此时权限没有用
返回列表