多态:允许将派生类指针赋值给基类指针
继承:派生类拥有父类的数据成员和成员函数
示例:
.h文件:
class Base {
public:
void A1(); //非虚函数,派生类有重写
void A2(); //非虚函数,派生类无重写
virtual void B1(); //虚函数,派生类有重写
virtual void B2(); //虚函数,派生类无重写
virtual void C() = 0; //纯虚函数
};
class ChildFirst:public Base{
public:
void A1();
void B1();
void C();
void D(); //派生类自己的成员函数
};
.cpp文件中定义打印信息
main函数中调用:
//Base b = new Base(); //错误 抽象类不能创建自己的对象,必须使用多态
Base* b = new ChildFirst(); //派生类初始化基类
b->A1(); //Base A1
b->A2(); //Base A2
b->B1(); //ChildFirst::B1
b->B2(); //Base B2
b->C(); //ChildFirst::C
//b->D(); //Base B2 //错误使用,必须是基类中有的成员函数
cout << "-------";
ChildFirst* C =new ChildFirst();
C->A1(); //ChildFirst::A1
C->A2(); //Base A2
C->B1(); //ChildFirst::B1
C->B2(); //Base B2
C->C(); //ChildFirst::C
总结:
1.使用派生类初始化基类对象,只能调用基类中有的成员函数,如果想要调用派生类的成员函数,则需要通过接口获得派生类对象
2.如果非虚函数,那么无多态的性质,只是继承的性质,使用派生类初始化的基类对象,调用派生类自己的成员函数
3.如果为虚函数,就具有多态性质,若派生类有重写,则调用派生类成员函数;若派生类无重写,则调用基类成员函数
4.纯虚函数一定在派生类重写
5.使用自己的类创建自己的对象,把virtual当成普通函数即可,只剩下继承性没有多态性