更多C++知识:C++目录索引
题目:
利用C语言实现C++里面的继承和多态特性
先来看看C++里面的继承和多态:
代码:
class A
{
public:
virtual void fun()
{
printf("A::fun()\n");
}
int _a;
};
class B :public A//B继承A
{
public:
virtual void fun()//虚函数重写
{
printf("B::fun()\n");
}
int _b;
};
int main()
{
A a;
B b;
A* p = &a;//对象的指针,满足多态
p->fun();//p调用A的函数
p = &b;
p->fun();//p调用B的函数
system("pause");
return 0;
}
效果:
思路:
首先知道继承的条件是什么?
答:有两种原则,has-a 和 is-a的原则
多态指的是什么?
答:多态指的就是有多种形态,例如:类A和类B,B继承了A,有A* p,p指向A就调A的函数,指向B就调B的函数
扫描二维码关注公众号,回复: 165410 查看本文章C语言实现方法
C语言中没有关键字class,但有struct,当struct B中包含Struct A时,满足继承的条件has-a,并且同时满足多态的效果,因为当有一个指针P去调struct A里面短的函数,只需加上作用域即可
代码:
typedef void(*FUNC)();//函数指针
struct A
{
FUNC _f;
int _a;
};
struct B
{
struct A a;//体现继承
int _b;
};
void funA()
{
printf("A::_f()\n");
}
void funB()
{
printf("B::_f()\n");
}
int main()
{
A a;
B b;
a._f = funA;
b.a._f = funB;//进行初始化
struct A* p = &a;
p->_f();//p调用A的函数
p = (struct A*)&b;
p->_f();//p调用B的函数
system("pause");
return 0;
}
效果: