C++ 学习之构造函数:构造函数小结1

谈到C++的类,就必然少不了构造函数这个概念,下面是自己学习C++ primer后对构造函数一些知识点的总结和理解

在创建类对象的时候,必然要执行构造函数,构造函数的功能是保证每个对象的数据成员具有合适的初始化。构造 函数是特殊的成员函数,它的名字与类型名称相同,而且没有返回值类型。构造函数可以重载,构造函数不能声明为const,即使创建的对象是const的。因为不管对象是不是const,const只是防止修改对象的数据成员,而构造函数只是对对象的数据成员进行初始化,谈不上修改。

下面来举个书上的例子示意说明一下:

程序:

程序运行,采用初始化1的方式,我们可以看到如下结果:

原因是,此时对象初始化时调用的是Sales_item():units_sold(0),revenue(0.0){}。此处用到了构造函数初始化列表,后面详细说明。

但此处要注意,Sales_item item; 不要写成Sales_item item();,这样便成了声明一个item函数,而类体中没有这样的函数定义。

采用初始化2的方式,可以看到如下结果:

原因是,此时对象初始化时调用的是Sales_item(istream&a){string b; a>>b; isbn=b; units_sold=0;revenue =0.0;},用户可以通过输入一个字符串给isbn赋值。

采用初始化3的方式时,结果如下:

原因是此时调用的构造函数是Sales_item(const string &str):isbn(str),units_sold(0),revenue(0.0) {}。注意此处构造函数的形参最好使用const string &str,const引用,否则像程序中的字符串字面值的方式时非法的,因为字符串字面值是一个const的字符数组。如果使用string &str,只能用一个string类的对象进行初始化,会缩小构造函数的应用范围。

当初始化const对象时,如方式4,此时想上文所说的,不用将构造函数也声明为const,我们可以看下运行结果:

可以看到,const对象仍然可以调用Sales_item():units_sold(0),revenue(0.0){}进行正常的初始化。

在Sales_item():units_sold(0),revenue(0.0){}构造函数中我们可以接触到一个新的而又常被人忘记的概念,构造函数初始化列表。

构造函数初始化列表以一个冒号:开始,接着是一个以逗号分隔的数据成员列表,每个数据成员后面跟着一个圆括号的初始化式。

篇幅限制,具体总结见本人博客C++ 学习之构造函数:构造函数小结2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值