博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
###学习《C++ Primer》- 1
阅读量:5340 次
发布时间:2019-06-15

本文共 1718 字,大约阅读时间需要 5 分钟。

#@author:      gr#@date:         2014-09-30#@email:        forgerui@gmail.com

记录读书过程中一些知识点。可能不系统,:-)

Part 1: C++类(第7章)

一、某些类不能依赖于默认构造函数

默认构造函数:不接受任何实参的构造函数

  1. 只有当类没有声明任何构造函数时,编译器才会自动地生成默认构造函数。
  2. 合成的默认操作可能执行错误的操作。
    比如:定义在块中的内置类型或复合类型(比如数组指针)的对象被默认初始化,则它们的值将是未定义的,应该需要手动进行定义。
  3. 有时候,编译器不能为某些类合成默认的构造函数。
    比如:有些成员类没有提供默认构造函数。

二、默认构造函数(C++11)

struct Sales_data{    Sales_data() = default;};

=default:C++11标准规定,如果需要默认的行为,那么可以加上= default来要求编译器生成构造函数。

三、类内成员初始化

struct Sales_data{    //有些编译器不支持    double a = 1.0;};

有些编译器支持内置类型的数据成员提供了初始值,有些编译器不支持类内初始值,那只能使用构造函数初始值列表或构造函数进行初始化。

四、构造函数的初始值有时必不可少

有些类型必须使用初始值进行初始,如引用const,和没有默认构造函数的类。这些类型无法在构造函数体中初始,只能放到初始值列表中。

此外,初始化和赋值的区别事关底层效率问题,前者直接初始化数据成员,后者先初始化后赋值,效率低。

class ConstRef{    public:        ConstRef(int ii);    private:        int i;        const int ci;        int &ri;};ConstRef::ConstRef(int ii){    //正确    i = ii;    //错误:const类型无法进行赋值    ci = ii;    //错误:引用类型无法进行初始化    ri = i;}

五、委托构造函数(C++11)

委托构造函数把工作委托给另一个构造函数,受委托的构造函数的初始值列表和函数体被依次执行。如果,函数体内有代码,会先执行受委托函数的函数体,之后才执行委托者的函数体。

struct Sales_data{    public:        //非委托构造函数        Sales_data(std::string s, unsigned cnt, double price):bookNo(s), units_sold(cnt), revenue(cnt*price){}        //其余构造函数全都委托给另一个构造函数        Sales_data():Sales_data("", 0, 0){}        Sales_data(std::string s):Sales_data(s, 0, 0){}        Sales_data(std::istream &is):Sales_data(){ read(is, *this); }};

六、使用默认构造函数

//错误:声明了一个函数而非对象Sales_data obj();//正确:obj2是一个对象而非函数Sales_data obj2;

七、explicit抑制隐式转换

`explicit`只能在类内使用,可以阻止类型进行隐式转换。class Sales_data{    public:        //只允许在类内构造函数        explicit Sales_data(std::string s):bookNo(s){}};

八、static成员

static成员与类关联在一起,不与对象绑定在一起。static只出现在类内部的声明语句中。

转载于:https://www.cnblogs.com/gr-nick/p/4034391.html

你可能感兴趣的文章
adb命令
查看>>
SQL自定义排序 ORDER BY
查看>>
Modal模态框scrolltop保留上次位移的解决方案
查看>>
python 函数(一)
查看>>
我说我在总结谁会信。。
查看>>
数据库索引的作用和长处缺点
查看>>
Laravel 安装代码智能提示扩展「laravel-ide-helper」
查看>>
java开发配套版本
查看>>
MySQL的 Grant命令权限分配
查看>>
非阻塞的c/s,epoll服务器模型
查看>>
YII框架安装过程总结
查看>>
HDOJ(HDU) 1862 EXCEL排序(类对象的快排)
查看>>
Codeforces Round #381 (Div. 2) 复习倍增//
查看>>
Money类型转化为String去除小数点后0解决方法
查看>>
ArcScene 高程不同的表面无法叠加
查看>>
[ONTAK2010] Peaks
查看>>
DLL 导出函数
查看>>
windows超过最大连接数解决命令
查看>>
12个大调都是什么
查看>>
angular、jquery、vue 的区别与联系
查看>>