学习网站建设与管理,专业做数据的网站,电影资源采集网站咋做,在线旅游网站建设方案目录1、类成员的就地初始化example2、构造函数初始化3、默认构造函数#xff1a;Default Constructor4、举例5、成员的初始化方法的优先级1、类成员的就地初始化example
class S { int m 7; // ok, copy-initializes m int n(7); // 错误#xff1a;不允许用小括号初始化…
目录1、类成员的就地初始化example2、构造函数初始化3、默认构造函数Default Constructor4、举例5、成员的初始化方法的优先级1、类成员的就地初始化example
class S { int m 7; // ok, copy-initializes m int n(7); // 错误不允许用小括号初始化 std::string s{a, b, c}; // ok, direct list-initializes sstd::string t{Constructor run}; // okint a[] {1,2,3}; // 错误数组类型成员不能自动推断大小 int b[3] {1,2,3}; // ok// 引用类型的成员有一些额外限制参考标准
public:S() { }
};2、构造函数初始化 A data field is an object type (Object in Object / Embedded Object) (类的数据域是一个对象类型被称为对象中的对象或者内嵌对象) The embedded object must be constructed before the body of ctor is executed (内嵌对象必须在被嵌对象的构造函数体执行前就构造完成)
class Time { /* Code omitted */ }
class Action {
public:Action(int hour, int minute, int second) {time Time(hour, minute, second); //time对象应该在构造函数体之前构造完成}
private:Time time;
};
Action a(11, 59, 30);解释time是Time的对象是Action的内嵌对象 需要注意的地方 在构造函数的函数体中不可以初始化类的数据成员 构造函数的函数体执行之前类中的数据成员必须完成初始化
3、默认构造函数Default Constructor
默认构造函数是可以无参调用的构造函数既可以是定义为空参数列表的构造函数也可以是所有参数都有默认参数值的构造函数。
class Circle1 {
public:Circle1() { // 无参数radius 1.0; /*函数体可为空*/}
private:double radius;
};
class Circle2 {
public:Circle2(double r 1.0) // 所有参数都有默认值: radius{ r } {}
private:double radius;
};4、举例
class Circle {
private:double radius;
public:double getArea() {return 3.14 * radius * radius;}
};
class Square {
private:double side;
public:double getArea() {return side * side;}
};
class Combo {
private:Circle c;Square s;};int main()
{Combo o{};couto.c.getArea() endl;return 0;
}此时c对象是个私有的所以不能直接访问 有关代码
class Circle {
private:double radius;
public://指示编译器生成无参构造函数Circle() default;//构造函数Circle(double r) {radius r;}double getArea() {return 3.14 * radius * radius;}
};
class Square {
private:double side;
public://指示编译器不构造默认构造函数//Square() delete;// 私有数据成员side double sideSquare(double side) :side{ side } {}//或者写成/*Square(double side){this-side side;}*/double getArea() {return side * side;}
};
class Combo {
public:Circle c;Square s;//构造函数.内嵌对象的构造必须在构造函数体之前就完成了Combo() :s{1.0} {}
};int main()
{Combo o{};couto.c.getArea() endl;return 0;
}5、成员的初始化方法的优先级 一个成员同时有就地初始化和构造函数列表初始化则就地初始化语句被忽略不执行