###学习《C++ Primer》- 1
点击查看Evernote原文。
#@author: gr
#@date: 2014-09-30
#@email: forgerui@gmail.com
记录读书过程中一些知识点。可能不系统,
:-)。
Part 1: C++类(第7章)
一、某些类不能依赖于默认构造函数
默认构造函数:不接受任何实参的构造函数
- 只有当类没有声明任何构造函数时,编译器才会自动地生成默认构造函数。
- 合成的默认操作可能执行错误的操作。
比如:定义在块中的内置类型或复合类型(比如数组和指针)的对象被默认初始化,则它们的值将是未定义的,应该需要手动进行定义。 - 有时候,编译器不能为某些类合成默认的构造函数。
比如:有些成员类没有提供默认构造函数。
二、默认构造函数(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只出现在类内部的声明语句中。
###学习《C++ Primer》- 1的更多相关文章
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
- Python学习--01入门
Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...
- Python 学习小结
python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...
- Python学习路径及练手项目合集
Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159
- python学习笔记-python程序运行
小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...
- Python学习记录day6
title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...
- Python学习记录day5
title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...
- [Python] 学习资料汇总
Python是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大且完善的通用型语言,已经有十多年的发展历史,成熟且稳定.Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用 ...
- Python学习之路【目录】
本系列博文包含 Python基础.前端开发.Web框架.缓存以及队列等,希望可以给正在学习编程的童鞋提供一点帮助!!! 目录: Python学习[第一篇]python简介 Python学习[第二篇]p ...
- python学习笔记系列----(八)python常用的标准库
终于学到了python手册的最后一部分:常用标准库.这部分内容主要就是介绍了一些基础的常用的基础库,可以大概了解下,在以后真正使用的时候也能想起来再拿出来用. 8.1 操作系统接口模块:OS OS模块 ...
随机推荐
- [C++]VS与第三方工具下载
名称:Qt 5.1.1 (商业版与开放源码许可GPL/LGPL) 说明:Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架 下载:http://www.qt.io/downl ...
- js为表格添加行和列
<table id="studentTable" align="center" border="1px;" cellpadding=& ...
- NGUI学习笔记(三):屏幕自适应
我们开发移动端游戏的时候,一般都会选择Constrained/FixedSize的缩放模式来保证图片在不同的分辨率下相对于屏幕的尺寸保持一致,但是对于屏幕自适应来说,这还是不够的,不同的手机存在不同的 ...
- iOS UDID和UUID详解
这篇是普及知识来了,纯属消遣时间,有需要的可以遛一遛. UDID的全名为 Unique Device Identifier :设备唯一标识符.从名称上也可以看出,UDID这个东西是和设备有关的,而且是 ...
- Linux安装JDK详细步骤
Linux安装JDK步骤 1.先从网上下载jdk(jdk-7u1-linux-i586.rpm),下载地址:http://www.oracle.com/technetwork/java/javase/ ...
- Spring3 MVC Login Interceptor(Spring 拦截器)
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- cocos2d 中加入显示文字的三种方式(CCLabelTTF 、CCLabelBMFont 和CCLabelAtlas)
在 cocos2d 中有三个类能够在层或精灵中加入文字: CCLabelTTF CCLabelBMFont CCLabelAtlas CCLabelTTF CCLabelTTF 每次调用 s ...
- C#-禁止调整窗体的大小
要是想禁止调整窗体的大小,可以查看:FormBorderStyle属性,该属性的设置中有一个"FixedSingle"的选择项,它可以禁止调整窗体的大小.
- eclipse中web项目部署以后jsp的java文件找不到问题(Tomcat配置serverlocations)
我的开发环境:eclipse kepler (4.3)+tomcat7.0.42. 在我想看eclipse中web项目jsp文件被tomcat转换成java以后的java源文件的位置,发现正常情况下的 ...
- Introdution to 3D Game Programming With DirectX11 第11章 习题解答
11.1 这道题要注意使用了line strip,由于曾经一直用triangle list,所以在几何渲染的时候easy算错定点描绘的顺序. 贴一些代码,大概就能把这个问题解释清楚了,由于框架还不是特 ...