effective c++学习笔记
来源:互联网 发布:流程管理 软件 hr软件 编辑:程序博客网 时间:2024/04/30 00:15
1.item3 p18:
如果关键字const出现在星号左边,表示被指物是常量;如果出现在星号右边,表示指针自身是常量;如果出现在星号两边,表示被指物和指针两者都是常量。
char greeting[] = "Hello";
char* p = greeting; // non-const pointer,non-const data
const char* p = greeting; // non-const pointer,const data
char* const p = greeting; // const pointer,non-const data
const char* const p =greeting; // const pointer,const data
const 成员函数:
任何不会修改数据成员的函数都应该声明为const 类型。如果在编写const 成员函数时,不慎修改了数据成员,或者调用了其它非const 成员函数,编译器将指出错误,这无疑会提高程序的健壮性。
2.item5 p34
1)
如果你自己没有声明,编译器就会为它声明一个copy构造函数,一个copy assignment操作符和一个析构函数。此外如果你没有声明任何构造函数,编译器也会为你声明一个default构造函数。所有这些函数都是public其inline。
class Empty { };
==
class Empty{public:
Empty(){}
Empty(const Empty & rhs){}
~Empty(){}
Empty& operator=(const Empty& rhs){}
};
2) C++并不允许让reference改指向不同对象
类中有reference和const成员,必须在构造函数中进行初始化?
reference成员必须在初始化列表方式进行初始化,而且参数应该为引用,因为如果这里不用引用,则到时候引用的将不是传入的参数,而是临时变量(形参),构造函数结束后临时变量销毁,再使用reference成员可能会是一个不可预料的数
Rational(int numerator, int denominator, int& value):n(numerator),d(denominator),ref(value){}
3.item07 p43
声明一个纯虚析构函数时,需要提供一份定义
class AWOV
{
public:
virtual ~AWOV() = 0;
};
AWOV::~AWOV(){}
因为在析构时,derived class的析构函数后会调用base class的析构函数。如没有,链接器会报错。
4.item13 p64
std::tr1::shared_ptr<T>不是C++11中的,是tr1的,如果要用需要包括#include <tr1/memory>
C++11中使用的是std::shared_ptr<T> ,如使用,需要编译器支持C++11
5.item24 p104
只有当参数被列于参数列(parameter list)内,这个参数才是隐式类型转换的合格参与者。
class Rational
{
public:
Rational(int numerator = 0, int denominator = 1){}
const Rational operator* (const Rational& rhs) const
{
return Rational();
}
};
int main()
{
Rational oneHalf;
Rational result = oneHalf * 2; //成功
result = 2 * oneHalf; //编译报错
}
应使用non-member函数替换上面的operator*成员函数
const Rational operator*(const Rational& lhs, const Rational& rhs)
{
return Rational();
}
6.item33 p161
derived classes内的名称会遮掩base classes内的名称。---是指在derived classes视角来说,如果是从base classes多态视角来说,则不存在遮掩。
输出结果为:
Derived mf1()
Base mf2()
Derived mf3()
Derived mf1()
Base mf1(int)
Base mf3()
Base mf3(double)
7.绝对不要重新定义一个继承而来的缺省参数值,因为缺省参数值都是静态绑定,而virtual函数却是动态绑定。
输出结果为:
0
0
1
1
- 《Effective C++》学习笔记
- 《Effective C++》学习笔记
- 《Effective C++》学习笔记
- 《Effective C++》学习笔记
- 学习笔记:Effective Objective-C
- Effective Objective-C学习笔记
- 《Effective C++》学习笔记(1)
- 《Effective Objective-C 2.0》学习笔记1
- 《Effective C++》学习笔记(一)
- 《Effective C++》学习笔记(二)
- 《Effective C++》学习笔记(三)
- 《Effective C++》学习笔记(四)
- 《Effective C++》学习笔记(五)
- 《Effective C++》学习笔记(六)
- 《Effective C++》学习笔记(七)
- 《Effective C++》学习笔记(八)
- Effective Objective-C 2.0 学习笔记之一
- Effective Objective-C 2.0学习笔记(部分)
- 机器学习算法中文视频教程
- Linux模块机制浅析
- 函数名做函数参数
- Ubuntu 10.10下简单安装配置R环境
- jQuery之CSS选择器学习笔记
- effective c++学习笔记
- Android学习小结(一)
- VC里面快速调用Nt系列函数示例方法
- 计算机视觉、机器学习相关领域论文和源代码大集合--持续更新……
- 薄板样条差值(Thin plate spline)Java实现
- 装饰模式设计-装饰类和继承类的区别
- 一些练习——童年往事
- asp.net 微信公众平台开发(二)公众账号开发模式
- [IOS]clang diagnostic、Wprotocol ..