对象 && 构造函数
2018-06-17 23:43:50来源:未知 阅读 ()
class A { public: int a; int b; int c;
//默认构造函数 }; int main() {
A a ;
A e { }; A f ( ); //不行 A c {1,2}; A d {1,2,3}; }
当对象的数据成员是public,在创建对象时可以在初始化列表中指定他们的值。
class A { public: int a; int b; int c; A(int d,int e,int f) {} //有参构造函数 }; int main() { A c1 {1,2}; //no instance of constructor "A::A" matches the argument list;
A c2 {1,2,3}; A c3 (1,2); //no instance of constructor "A::A" matches the argument list; A c4 (1,2,3);
A c5; //no default constructor exists for class "A"
}
注意调用构造函数完全不同于包含公共数据成员值的初始化列表中提供的语句,而此处初始化列表包含构造函数的实参,有三个形参,所以初始化列表中必须有三个值。
A c5;出错的原因是类缺少默认构造函数,默认构造函数被抑制了,需要自己重新定义。
当已经存在带形参的构造函数,如果我们仍然希望声明没有初始化列表的对象,那么必须在自己的类中添加 默然构造函数的定义。
可以如下方式添加默认构造函数:
A()=default;
A(){}
class A { public: int a ; int b ; int c ; A(int d = 1, int e = 1, int f = 1) {} //含有默认值的构造函数 ~A(){}; }; int main() { A a; A b; A e{}; A c1{1,2}; A c2{ 1,2,3}; A c3( 1,2,3); A c4( 1,2); A d{}; }
对于含有默认值的构造函数,就是默认构造函数,下面都一样
A()=default;
A(){}
A(int d = 1, int e = 1, int f = 1) {}
在构造函数中使用初始化列表
在构造函数头用初始化列表初始化数据成员,比使用赋值语句效率高,初始化列表总是在函数体之前执行,
所以可以在构造函数中使用已初始化的数据成员
A(int d = 1, int e = 1, int f = 1) :a{ d }, b{ e }, c{ f } {} //使用初始化列表初始化数据成员
A(int d = 1, int e = 1, int f = 1) //使用赋值语句初始化数据成员
{ a=d; b=e; c=f; }
构造函数必须使用初始化列表的地方
- const 常量类型成员
- &引用类型成员
对于const和引用类型成员,只能使用成员初始化列表,不能再构造函数中使用赋值语句初始化。
另外成员初始化顺序不同于在构造函数中的初始化列表中的顺序,而与在类定义中的顺序相同。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++ 对象的初始化和赋值 2020-06-03
- C++ 析构函数 2020-06-03
- C++ 构造函数 2020-06-03
- Unsolved --> Solved OJ思路题解 2020-05-30
- Building & Debugging chromium on CLion for Linu 2020-05-19
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash