方法一:虚函数使用
在c++中,父类和子类虚函数都有对应的虚函数表,如果子类重写了虚函数,就会将新写的这个函数的地址放到他自己的表内,并且通过父类的指针指向子类所开辟的空间,这样就可以调用子类的方法
方法二:强转转换
但是有的子类方法不是虚函数,这就必须要强转,将父类的指针指向子类的开辟空间的首地址,
class Base;
class Child: Base
Base* Cba=new Child(); //相当于把基类Base的指针指向一个子类Chid开辟的对象,这个空间包含从Base继承
而来的和Child独有的成员,但是因为声明指针为Base*类型,因此只能通过这个指针存取从基类继承的成员变量
和成员函数,而不能存取子类Child自己声明的东西,因为基类指针并不能知道子类都有哪些扩展~~,如果想使用
派生类的声明的,就需要把基类转换为派生类。
基类转换为派生类转换方法2种,
1、基类强制转换成派生类(不推荐)。
2、使用dynaminc_cast进行转换(推荐);
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <iostream>
using namespace std;
class Base
{
public:
void virtual Func()
{
cout << "Base\n";
}
};
class Derived : public Base
{
public:
void Func()
{
cout << "Derived\n";
}
void NewFunc()
{
cout << "New func\n";
}
};
//父类指针1.虚函数使用:是根据实力的对象类型选择调用的函数 2.指针强转
void main()
{
/* Derived* a = new Derived;
a->Func();*/
Base* b = new Derived();
b->Func();
//安全转换
Derived* d = dynamic_cast <Derived*>(b);
if (d != NULL)
{
d->NewFunc();
}
return;
}