首页 > 代码库 > C++虚函数

C++虚函数

1.在一般情况下,指向一种类型对象的指针不允许指向另一种类型的对象,然而指向基类对象的指针可以指向该基类的共有派生类对象(反过来不成立),这是运行时,多态的基础。指向基类队象的指针指向派生类对象后,可以访问派生类中有基类继承下来的成员,但不能访问那些派生类对象自己增加的成员。

2.一个含有虚函数的类称为多态类。

3.虚函数就是在一个类中用virtual定义的成员函数。基类的虚函数在派生类中仍是虚函数,并且一般在派生类中重定义。在派生类中重定义继承成员虚函数时,即使没有保留virtual,该函数仍为虚函数。

4.注意区分重载和重定义。

5.纯虚函数是在基类中声明但是没定义的虚函数,如果基类中包含纯虚函数,那么任何派生类必须定义虚函数。纯虚函数的形式: virtual 类型 函数名(参数表)=0;如果派生类没有这么做,那么这个函数在该派生类中仍然是纯虚函数,此时,如果创建对象,编译将报错。

6.包含纯虚函数的类为抽象类

7.函数重载的注意事项:a,返回值类型不能用于区分重载。

                                   b,有typedef定义的类型不能用于区分重载。

                                   c,不同参数传递方式不能用于区分重载。

    (只有参数对应位置的类型和个数可以用于区分重载)

8.在一个类声明中,以类类型本身作为形式参数且参数传递方式为按引用调用的构造函数成为:拷贝构造函数。

拷贝构造函数结构了对象安值传递的问题。

   作用:a.声明对象是,使用另一个对象来初始化。

            b.作为函数形参。

            c.作为函数返回值。

类类型对象安值作为形参时,,创建对象副本时,没有调用构造函数,而结束时却调用了两次析构函数,如果构造和析构用到new delete时 胡产生严重问题。

解决办法:安值传递改为按引用传递 或 定义一个 拷贝构造函数来初始化对象副本。

对象作为函数返回值产生的问题:当一个对象由函数返回时,编译程序将自动创建一个临时对象来保存函数的返回值。这个临时对象才是函数真正的返回值。函数调用结束时,该临时对象也被撤销。

9.可以使用访问声明将一些被屏蔽的公有成员恢复 到原来的访问控制状态。访问声明采用作用域::             基类名::成员名

10.屏蔽继承成员:,如果要在一个公有派生类中屏蔽从基类中继承的公有成员函数,通常在派生类protected private 之后定义一个完全相同的函数原形,然而函数题为空。