您的位置:首页 > 编程语言 > C语言/C++

《读java编程思想》 c++与java的不同(C++进阶 继承 组合 多态)

2012-04-28 16:39 316 查看
继承对象的构造函数在初始化列表中初始化父对象,调用父对象的构造函数。当我们在创建自己的拷贝构造函数时,总是要调用父类的拷贝构造函数,否则父类的默认构造函数会被调用,导致不正确的结果。而析构函数会自动调用,因为析构函数只有一个。
任何时候重新定义了基类的一个重载函数,在新类之中所有其他版本都被自动隐藏了
c++中的多态性与晚绑定是通过虚函数声明的。典型的编译器为每个包含虚函数的类创建一个表(称为虚表VTABLE),并秘密放置一个指针,VPTR指向这个对象的VTABLE。当通过基类指针做虚函数调用的时候,编译器静态的插入能取得这个VPTR并在VTABLE中查找函数地址的代码,这样就能调用正确的函数并引发晚绑定的发生。
重载和重新定义:编译器不允许我们改变重新定义过的函数的返回值(如果不是虚函数,则允许),这样是为了保证多态的调用基类,而保持约定,否则会出现问题。和java一样,支持协变返回类型
虚函数在构造函数或者析构函数中只会调用本地版本,因为还没有初始化好或者已经无效;构造函数不能为虚函数,但是析构函数常常必须是虚函数,这样保证调用了适当的派生类析构函数。纯虚析构函数是允许的,但是必须为它提供函数体(因为析构函数不是一般的函数,有特别的意义,在类的层次结构中,析构函数总是会被调用的,如果没有定义,那么调用谁呢?!)而且继承自该类的子类不需要为析构函数提供函数体。纯虚函数的作用在于组织基类的实例化
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: