《Accelerate C++》读书笔记(四)

1、       main()函数有两个参数:一个整型参数,通常的表示为:int argc;一个指向字符串指针的指针参数,通常表示为:char ** argv; 示例如下:


2、       在定义ofstream/ifstream类型对象的时候需要提供一个文件名,要求提供的是一个指向以空字符结尾的字符数组的首元素的指针。

3、       赋值和初始化的区别:赋值总是删除一个旧值,获得一个新值,而初始化包含创造一个新的对象,同时给它一个初始值。

4、       explicit 关键词添加到构造函数前面,则该构造函数不能作为类型转换操作符隐式的调用,只能显示调用。

5、       string类中c_str()成员函数会生成一个指向一个空字符结尾的字符数组的const char*类型的值。但该数组的值只短暂的存在,在下一个可能改变s的值的操作放生时就失效了。

6、       C++中的继承方式有三种:1、public:继承时保持基类中各成员属性不变,并且基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象只能访问基类中的public成员。2、private:继承时基类中各成员属性均变为private,并且基类中private成员被隐藏。派生类的成员也只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。3、protected:继承时基类中各成员属性均变为protected,并且基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。

7、       初始化列表的作用相当于在构造函数内进行相应成员变量的赋值,但两者是有差别的。在初始化列表中是对变量进行初始化,而在构造函数内是进行赋值操作。两者的差别在对于像const类型数据的操作上表现得尤为明显。我们知道,const类型的变量必须在定义时进行初始化,而不能对const型的变量进行赋值,因此const类型的成员变量只能(而且必须)在初始化列表中进行初始化,即下面的代码将会出错:

myClass::myClass(){

a = 1;//没错,效果相当于在初始化列表中进行初始化

b = 1;//出错,const变量不能进行赋值操作;}

2)初始化的顺序与成员变量声名的顺序相同。

先看一下下面的程序:

myClass::myClass():b(1),a(b){ }

这样的执行结果a,b各是多少呢?b=1,a=1?不是,b=1而a是个随机数。这一点是相当重要的哦,一般在初始化列表中进行初始化时,初始化的顺序应与声明的顺序保持一致,防止出现不必要的错误。

3)对于继承的类来说,在初始化列表中也可以进行基类的初始化,初始化的顺序是先基类初始化,然后再根据该类自己的变量的声明顺序进行初始化。

8、       C++关键字mutable:突破const的限制而设置的,被mutable修饰的变量将永远处于可变的状态,即使在cosnt函数中。

9、       const 数据成员、const成员函数和const类对象的特点和属性:1、const数据成员不能被赋值,只能在定义时初始化。2、const成员函数不能修改类数据成员,一般情况下只要改函数方法不修改类数据成员,均需要将其定义成const成员函数,不能访问非const成员函数。3、const类对象只能访问const成员函数。


2、       在定义ofstream/ifstream类型对象的时候需要提供一个文件名,要求提供的是一个指向以空字符结尾的字符数组的首元素的指针。

3、       赋值和初始化的区别:赋值总是删除一个旧值,获得一个新值,而初始化包含创造一个新的对象,同时给它一个初始值。

4、       explicit 关键词添加到构造函数前面,则该构造函数不能作为类型转换操作符隐式的调用,只能显示调用。


5、       string类中c_str()成员函数会生成一个指向一个空字符结尾的字符数组的const char*类型的值。但该数组的值只短暂的存在,在下一个可能改变s的值的操作放生时就失效了。


6、       C++中的继承方式有三种:1、public:继承时保持基类中各成员属性不变,并且基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象只能访问基类中的public成员。2、private:继承时基类中各成员属性均变为private,并且基类中private成员被隐藏。派生类的成员也只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。3、protected:继承时基类中各成员属性均变为protected,并且基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。

7、       初始化列表的作用相当于在构造函数内进行相应成员变量的赋值,但两者是有差别的。在初始化列表中是对变量进行初始化,而在构造函数内是进行赋值操作。两者的差别在对于像const类型数据的操作上表现得尤为明显。我们知道,const类型的变量必须在定义时进行初始化,而不能对const型的变量进行赋值,因此const类型的成员变量只能(而且必须)在初始化列表中进行初始化,即下面的代码将会出错:

myClass::myClass(){

a = 1;//没错,效果相当于在初始化列表中进行初始化

b = 1;//出错,const变量不能进行赋值操作;}

2)初始化的顺序与成员变量声名的顺序相同。

先看一下下面的程序:

myClass::myClass():b(1),a(b){ }

这样的执行结果a,b各是多少呢?b=1,a=1?不是,b=1而a是个随机数。这一点是相当重要的哦,一般在初始化列表中进行初始化时,初始化的顺序应与声明的顺序保持一致,防止出现不必要的错误。

3)对于继承的类来说,在初始化列表中也可以进行基类的初始化,初始化的顺序是先基类初始化,然后再根据该类自己的变量的声明顺序进行初始化。

8、       C++关键字mutable:突破const的限制而设置的,被mutable修饰的变量将永远处于可变的状态,即使在cosnt函数中。

9、       const 数据成员、const成员函数和const类对象的特点和属性:1、const数据成员不能被赋值,只能在定义时初始化。2、const成员函数不能修改类数据成员,一般情况下只要改函数方法不修改类数据成员,均需要将其定义成const成员函数,不能访问非const成员函数。3、const类对象只能访问const成员函数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值