一、整体代码
01.cpp
#include <IOSTREAM>
using namespace std;
class Base {
public:
virtual void display() { //纯虚函数,virtual声明的函数,向上转型后的对象才能调用到子类同名的方法
cout 《 "Base" 《 endl;
}
Base() {
cout 《 "Base …" 《 endl;
}
virtual ~Base() { //纯虚析构函数,只有声明成virtual,向上转型的对象先调用子类的析构函数,再调用父类的析构函数
cout 《 "~Base …" 《 endl;
}
};
class Derived: public Base {
public:
void display() { //覆盖父类的方法
cout 《 "Derived" 《 endl;
Base::display(); //使用父类的方法,由于是覆盖,所以同名,要用这种方式来引用
}
void test() { //定义自己的方法
display();
}
Derived()
{
cout《"Derived …"《ENDL; d- Derived; d="new" Base* { main(void) int }; } …?《endl; cout《 ~Derived ~Derived()>display();
delete d;
return 0;
}
二、运行结果
Base …
Derived …
Derived
Base
~Derived …
~Base …
三、直接生成子类对象,可以调用子类的public方法和父类public非virtual的方法
直接生成父类对象,只能调用父类public方法
生成子类对象向上转型为父类对象,能够调用父类public非virtual的方法和子类覆盖virtual的方法