继承与多态的概念
继承:是面向对象最显著的特点,继承是从已有类派生出新的类,新的类继承了已有类的数据和行为, 并能扩展新的能力,已有类被称为父类/基类,新的类称为子类/派生类;
多态:按字面意思就是“多种形态”,在面向对象语言中,接口的多种不同实现方式,即为多态, 同一操作用于不同的对象可以有不同的解释,产生不同的结果,这就是多态性,简单来说,就是允许基类 指针指向父类;
封装、继承、多态 是C++三大特性,而C语言不具有的,在C++中用class类实现了这三大特性,但是在C语言中可以用struct结构体来模拟实现C++的继承和多态。
继承:是面向对象最显著的特点,继承是从已有类派生出新的类,新的类继承了已有类的数据和行为, 并能扩展新的能力,已有类被称为父类/基类,新的类称为子类/派生类;
多态:按字面意思就是“多种形态”,在面向对象语言中,接口的多种不同实现方式,即为多态, 同一操作用于不同的对象可以有不同的解释,产生不同的结果,这就是多态性,简单来说,就是允许基类 指针指向父类;
封装、继承、多态 是C++三大特性,而C语言不具有的,在C++中用class类实现了这三大特性,但是在C语言中可以用struct结构体来模拟实现C++的继承和多态。
#include<iostream>
using namespace std;
//C++中的继承与多态
struct A
{
virtual void Fun() //C++中的多态:通过虚函数实现
{
cout << "A:Fun()" << endl;
}
int a;
};
struct B :public A //C++中的继承:B类公有继承A类
{
virtual void Fun() //C++中的多态:通过虚函数实现(子类的关键字virtual可加可不加)
{
cout << "B:Fun()" << endl;
}
int b;
};
//C语言模拟实现的继承和多态
typedef void(*fun)();//C语言结构体中不能包含成员函数,所以在结构体外定义函数指针
struct AA
{
fun _fun;
int _a;
};
struct BB
{
AA a;//定义AA结构体对象实现继承
int _b;
};
void funA()
{
cout << "A:_funA()" << endl;
}
void funB()
{
cout << "B:_funB()" << endl;
}
void Test1()
{
//测试C++中的继承与多态
A a; //定义一个父类对象a
B b; //定义一个子类对象b
A* p1 = &a; //定义一个父类指针指向父类的对象
p1->Fun(); //调用父类的同名函数
p1 = &b; //让父类指针指向子类的对象
p1->Fun(); //调用子类的同名函数
//测试C语言模拟实现的继承与多态
AA aa;
BB bb;
aa._fun = funA;
bb.a._fun = funB;
AA *p = &aa;//定义AA的对象指针
p->_fun();
p = (AA*)&bb;//父类指针指向子类对象
p->_fun();//实现多态
}
int main()
{
Test1();
system("pause");
return 0;
}