复习c++: 继承 , static, cerr , cout , clog

来源:互联网 发布:mac 编译openwrt 2017 编辑:程序博客网 时间:2024/04/26 21:14

继承和多态

 

1。友元是不可以被继承的:基类的友元不可以访问派生类的成员;同样,一个友元的派生类也不可以访问定义友元的类。

2。除static成员外,每个派生类都保存了基类的一个副本,包括派生类不能访问的 private成员;static在整个继承层中只有一个,其访问属性跟其他成员一样。

3。虚函数在本质上是语义上的完备性表现:作为基类的成员却可以能被派生类重新定义;当然也正因为如此才有了多态。

4。派生类的声明不允许有继承列表。

5。继承是非自反的,也就是不能从自身继承。

6。Constructors and the copy-control members are not inherited,A class may initialize only its own immediate base class.

7。派生类如果自己定义了拷贝构造函数和赋值运算,则基类的部分不会自动激发,需要显示调用,如果派生类使用自定义的拷贝构造函数时没有显示调用基类的拷贝构造函数,那么基类会使用自己的默认构造函数来对基类部分的成员赋值;而析构函数一直激发基类的析构函数,也就是说派生类没有必要对基类的成员进行析构操作。
8。 一般不要override 非 virtual 成员函数,否则会产生二义性。(OOD)

9。一般不要overload virutal 函数因为virtual函数只有一个virtual参数表。 (OOD)

10。析构函数应该经常被定义为虚:我们使用一个基类的指针,显然是可以动态绑定的,如果在运行时指针指向基类的一个派生类,当使用这个指针析构派生类时会发生什么呢?要析构首先要调用一个析构函数,根据多态的定义这个析构函数必须是基类基类部分的,因为虚函数不可以被继承,也因为我们需要对派生类做自己的清楚操作,所以在基类中的这个析构函数必须是虚的,故必须在基类中定义虚析构函数。

 

 

static

1.关键字static,friend,explicit,virtual只能出现在类体中,inline即可以出现在类体内,也可以出现在类体外,只要有一个出现就是内联函数。

 (c++ primer)

A const static data member of integral type can be initialized within the class body as long as the initializer is a constant expression。

When a  const   static data member is initialized in the class body, the data member must still be defined outside the class definition。

When an initializer is provided inside the class, the definition of the member outside the class   must not specify an initial value。

  

非静态成员函数可以任意地访问静态成员函数和静态数据成员; 

 静态成员函数不能访问非静态成员函数和非静态数据成员.静态成员函数的参数没有this指针,也不可以是virtual函数。

说静态成员不能被继承,是因为子类跟父类共享一份静态成员,但子类使用正常方法仍然能够访问。

 

静态全局变量不能被其它文件所用;其它文件中可以定义相同名字的变量,不会发生冲突;

在函数的返回类型前加上static关键字,函数即被定义为静态函数。静态函数与普通函数不同,它只能在声明它的文件当中可见,不能被其它文件使用。其它文件中可以定义相同名字的函数,不会发生冲突。

 

C++变量作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。

 

Cerr, cout , clog

三个都是ostream类定义的输出流对象,

cout是在终端显示器输出,cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据,当向cout流插入一个endl,不论缓冲区是否漫了,都立即输出流中所有数据,然后插入一个换行符.

cerr流对象是标准错误流,指定为和显示器关联,和cout作用差不多,有点不同就是cout
通常是传到显示器输出,但可以被重定向输出到文件,而cerr流中的信息只能在显示器输出.

clog流也是标准错误流,作用和cerr一样,区别在于cerr不经过缓冲区,直接向显示器输出信息,而clog中的信息存放在缓冲区,缓冲区满或者遇到endl时才输出

 

 

 

 

摘自http://www.cnblogs.com/xuliu/archive/2010/04/19/1715411.html

原创粉丝点击