C++ 继承与纯虚函数(调用子类接口)
程序员文章站
2023-12-31 22:24:28
...
首先明确C++中的多态机制
纯虚函数是为了能在父类中提供一个各个子类通用的接口。在父类中创建一个纯虚函数:
class Base
{
public:
virtual void func() = 0; // 纯虚函数
// 只要有一个纯虚函数,这个类为抽象类
// 无法实例化对象、必须要重写父类中的纯虚函数,否则也属于抽象类
};
然后在子类中重写以上函数
class Son :public Base
{
public:
virtual void func()
{
cout << "func的调用" << endl;
}; // 子类必须重写纯虚函数
};
但是
值得注意的是,要想调用公共接口,必须用父类指针指向子类对象
void test01()
{
//Base b; // 报错,抽象类无法实例化对象
//new Base; // 报错,抽象类无法实例化对象
//Son s; // 子类必须重写纯虚函数
Base *base = new Son; // 多态
base->func();
}
Base *base = new Son; 父类指针指向子类对象,调用多态机制
但是,此时指针base->并不能指出来子类特有的成员函数,如果想调用子类特殊的接口
需要强转为子类指针调用
加入Son有个成员函数 MakeS()
base->MakeS() 是调用不到的
需要先对指针进行强转:
Son * son = (Son* ) base;
然后调用子类成员函数
son->MakeS();