Absolute C++心得(续2)

来源:互联网 发布:游戏编程基础 编辑:程序博客网 时间:2024/05/17 01:45
21、有两种用于隐藏帮助函数的好方法:
1)如果帮助函数需要调用函数,则将帮助函数声明为类的私有成员函数。

2)如果无需调用对象,则可以把帮助函数设置为类的静态成员函数。但是将帮助函数放在类的实现文件的未命名空间中,更好!

22、我们可以按照通常的方式声明一个流变量,但是这些变量在一些情况下不能像其他变量那样使用。不能使用一个赋值表达式来
为一个流变量赋值。可以使用一个流类型的参数,但是该参数必须是一个引用调用参数,而不能是一个传值调用参数。形如:
ostream& operator <<(ostream& out,class a);

23、测试是否读到文件尾的方法:
1)利用eof()来判断。例如:
char next;
inStream.get(next);
while(!inStream.eof())
{
cout << next;
inStream.get(next);
}
这种方法当读到最后一个字符时,inStream.eof()仍为false,只有再次读的时候,才会变为true。
2)利用提取操作符读文件时返回一个布尔值。(inStream >> next),返回false表示读到文件尾。

24、#include <iomanip>包含setw,setprecision等方法。都是设置后的下一次生效。

25、如果类B派生自类A,类C派生自类B,那么当类C的对象被创建时,首先调用的是类A的构造函数,其次是类B的构造函数,最后才
是执行类C的构造函数的其他部分。
相反的,如果是类C的对象被析构时,首先调用类C的析构函数,然后是类B的析构函数,最后才是类A的析构函数。

26、如果没有包含对基类构造函数的调用,那么在调用派生类构造函数时会产生对基类默认(无参)构造函数的自动调用。

27、基类的私有成员变量(或私有成员函数)在基类的声明和实现之外是不可以直接访问的,即使在派生类的成员函数的定义
也是不可以访问的。

28、构造函数、析构函数和赋值操作符不可被继承。但是,在为派生类定义重载的赋值操作符和复制构造函数时,它们可以被使用
并且几乎在所有情况下都必须使用。
1)如果Derived是派生自Base,那么类Derived中重载的赋值操作符的定义的开始部分通常会像下面那样:
Derived& Derived::operator =(const Derived& rightSide)
{
Base::operator =(rightSide);
...
}
2)如果Derived是派生自Base,那么类Derived定义复制构造函数中,通常是使用基类Base的复制构造函数来设置继承而来的
成员变量及其数据。代码的开始部分通常就像下面这样:
Derived::Derived(const Derived& Object) : Base(Object)
{
...
}

29、在一个类的定义和实现中,可以访问这个类的任何对象的私有成员,而不仅仅是当前调用对象的私有成员。例如:
void classA::func(classA& other)
{
other.a;//这样写是对的,虽然a是类classA的私有成员变量。
}

30、如果一个函数是虚函数,并且在某个派生类给出了其新定义,那么对于该派生类的任何对象而言,它总是使用自己给出的虚
函数定义,即使该虚函数在父类的某个函数的定义中被间接调用。这种方法叫做后绑定。