最近的一些零碎的笔记

  1. 当显示字符类型的指针时,这个指针将显示字符串而不是指针的内容,如果要在字符指针中显示地址,只需把它强制转换成void指针
  2. 只有地址可以被存储在指针变量中
  3. 函数头结尾处的const,使函数成为常量函数,常量函数不能改变调用对象,主要是为了确保函数不会意外地改变对象。
  4. 构造函数的三种用法

          1)  初始化类数据成员,类的数据成员不能在类的声明中被初始化,因为每个对象都有自己的变量,并且必须由正在被创建的对象所需要的值来初始化。

          2)  构造函数还可以用于验证数据。

          3)   构造函数必须用于为对象分配内存。

Tip:构造函数不能有返回类型,即使是空类型,如果提供了任意类型的构造函数,编译器就不会提供默认的构造函数了。所以一般还是显式包含一个一个默认的构造函数比较好两种    5.复制构造函数

       1)  执行对象所有组件的简单变量和变量之间的赋值复制,也成为位复制

       2)  逻辑复制,复制内容为指针

  6.复制构造函数使用的三种情况

      1)   当使用另一对象作为参数初始化一个对象时

      2)   当对象被值传递给函数时

      3)   当对象从函数中返回时

8.类和结构的区别:只有一条,就是数据成员在结构中默认为public,而在类中默认是private。

9.如果函数是被递归调用的,就不要使用内联函数。

10.不要使用赋值操作符在初始化列表中初始化数据成员。

11.如果想把继承后的私有类型重新定义为protected类型,就用using和作用域解析操作符重写它。一个例子

1 class Base
2 {
3 protected:
4 int dam;
5 };
6 class Derive:private Base
7 {
8 protected:
9 using Base::dam;
10 };

12. 多态性的三个条件:继承,虚函数,指针或引用

13. 静态绑定:当创建了类型为基类的的指针时,无论该指针再指向派生类的什么对象,编译器都会调用和指针类型基类有关的函数,称为静态绑定

14. 不能有虚构造函数,但可以创建虚析构函数,不能有虚构造函数,但可以创建虚析构函数,为什么呢?举个例子,基类动态分配了一个浮点数数组p,派生类动态分配了浮点数数组q,当使用基类指针指向一个派生类对象时,这个指针只能看到基类,当这个对象被删除时,就只有基类数组被删除,从而给派生类造成了内存泄漏。

15.  基类函数被声明为纯虚函数的两种情况:

1)   不能参与派生类可能需要的动作

2)   想强制每个派生类重定义这个函数

方法:virtual return_type identifier(parameter list)=0;

16.  抽象类:至少有一个纯虚函数的类,下面为用途

1)   允许多态性

2)   可以定义能够在派生类中被继承并且不用重定义的具体成员

3)   为必须在派生类中重定义的纯虚函数提供了模型

17.  向上和向下强制类型转换:当派生类对象被转换成基类对象时,发生向上强制转换,当基类对象被转换成派生类对象时,发生向下强制转换,同时,向下强制转换指向对象的指针是可以的,但是需要使用动态强制转换来完成,也就是运行期间完成的。语法如下:dynamic_cast<type>(data);

18.  一个程序的优良性可以由以下原则衡量,一是模块是独立的,二是函数具有单一的目的。

19.  构造函数,析构函数,非成员函数,和赋值操作符在派生类是并没有被继承,必须重新定义它们。

20.  基类的构造函数执行时间早于派生类的构造函数,而析构函数要晚于派生类的析构函数。

21.  对基类构造函数的调用应该在派生类的初始化表部分。

posted @ 2011-05-02 17:22  lazycoding  阅读(248)  评论(0编辑  收藏  举报