《读java编程思想》 c++与java的不同(C++进阶 继承 组合 多态)
2012-04-28 16:39
316 查看
继承对象的构造函数在初始化列表中初始化父对象,调用父对象的构造函数。当我们在创建自己的拷贝构造函数时,总是要调用父类的拷贝构造函数,否则父类的默认构造函数会被调用,导致不正确的结果。而析构函数会自动调用,因为析构函数只有一个。
任何时候重新定义了基类的一个重载函数,在新类之中所有其他版本都被自动隐藏了
c++中的多态性与晚绑定是通过虚函数声明的。典型的编译器为每个包含虚函数的类创建一个表(称为虚表VTABLE),并秘密放置一个指针,VPTR指向这个对象的VTABLE。当通过基类指针做虚函数调用的时候,编译器静态的插入能取得这个VPTR并在VTABLE中查找函数地址的代码,这样就能调用正确的函数并引发晚绑定的发生。
重载和重新定义:编译器不允许我们改变重新定义过的函数的返回值(如果不是虚函数,则允许),这样是为了保证多态的调用基类,而保持约定,否则会出现问题。和java一样,支持协变返回类型
虚函数在构造函数或者析构函数中只会调用本地版本,因为还没有初始化好或者已经无效;构造函数不能为虚函数,但是析构函数常常必须是虚函数,这样保证调用了适当的派生类析构函数。纯虚析构函数是允许的,但是必须为它提供函数体(因为析构函数不是一般的函数,有特别的意义,在类的层次结构中,析构函数总是会被调用的,如果没有定义,那么调用谁呢?!)而且继承自该类的子类不需要为析构函数提供函数体。纯虚函数的作用在于组织基类的实例化
任何时候重新定义了基类的一个重载函数,在新类之中所有其他版本都被自动隐藏了
c++中的多态性与晚绑定是通过虚函数声明的。典型的编译器为每个包含虚函数的类创建一个表(称为虚表VTABLE),并秘密放置一个指针,VPTR指向这个对象的VTABLE。当通过基类指针做虚函数调用的时候,编译器静态的插入能取得这个VPTR并在VTABLE中查找函数地址的代码,这样就能调用正确的函数并引发晚绑定的发生。
重载和重新定义:编译器不允许我们改变重新定义过的函数的返回值(如果不是虚函数,则允许),这样是为了保证多态的调用基类,而保持约定,否则会出现问题。和java一样,支持协变返回类型
虚函数在构造函数或者析构函数中只会调用本地版本,因为还没有初始化好或者已经无效;构造函数不能为虚函数,但是析构函数常常必须是虚函数,这样保证调用了适当的派生类析构函数。纯虚析构函数是允许的,但是必须为它提供函数体(因为析构函数不是一般的函数,有特别的意义,在类的层次结构中,析构函数总是会被调用的,如果没有定义,那么调用谁呢?!)而且继承自该类的子类不需要为析构函数提供函数体。纯虚函数的作用在于组织基类的实例化
相关文章推荐
- 《读java编程思想》 c++与java的不同(C++进阶 拷贝和重载)
- JAVA进阶 面向对象程序设计——第4章 继承与多态【不同访问属性使子类在使用这些成员时不同】
- C++组合,继承,委托,多态_boolan
- Java,C#,C++在继承,覆盖和多态,抽象类等几个方面的比较归纳
- 0022 Java学习笔记-面向对象-继承、多态、组合
- C#的继承多态与Java中的不同
- C++和Java继承关系中方法覆盖的不同
- JAVA中几个易混淆关键词的理解:行为,隐藏,组合和继承,覆写和重载,多形(多态)性,动态绑定,上溯造型,抽象类,接口
- C++中类的继承与Java中的不同,C++的派生类不能继承父类的构造函数和析构函数(不一定正确)
- C++与JAVA多态相同与不同
- JAVA中几个易混淆关键词的理解:行为,隐藏,组合和继承,覆写和重载,多形(多态)性,动态绑定,上溯造型,抽象类,接口
- C++/java 继承类的多态详解及实例代码
- Java,C#,C++在继承,覆盖和多态,抽象类等几个方面的比较归纳
- Java,C#,C++在继承,覆盖和多态,抽象类等几个方面的比较归纳
- C++的继承,多态和组合
- 《读java编程思想》 c++与java的不同(C++基础)
- Java中组合与继承的区别与不同的应用场景
- Java继承,多态,组合应用
- C++和Java继承的不同
- Java中的继承,封装,多态三种体系与C++的区别