您的位置:首页 > 编程语言 > C语言/C++

C语言模式实现C++继承和多态

2017-07-28 18:51 525 查看
C实现一个struct A和struct B各包含一个int成员a和b,要求达到B继承了A的效果,也就是B里面包含一个A。并且能达到多态的效果,也就是一个A*p指向A调的是A的函数,指向B调用的是B的函数

何为继承 ?

定义:在C++中所谓的继承就是在一个已存在的类的基础上建立一个新的类。已存在的类称为“基类”或者“父类”,新建立的类称为“派生类”或者“子类”,一个新类从已有的类那里获得其已有特性,这种现象称为类的继承,类的继承是用已有的类来建立专用类的编程技术。

优点: a) 代码复用

b) 提高程序的可扩展性

特点: a) 传递性

b) 单根性:一个类只能有一个父类但可以有多个子类

c) 相对性:描述一个类时应该说类A相对于类B是子类或父类,而不能简单的定义类A是子类或父类

何为多态?

多态就是向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(方法);

例如:使用运算符“+”使两个数值相加,就是发送一个消息,他要调用operator+函数,实际上,整型,单精度型,双精度型的加法操作过程是互相不同的,是由不同内容的函数实现的。很明显,它们是通过不同的方法来响应同一消息。

在C++中,多态的表现形式之一是:具有不同功能的函数可以用同一个函数名,这样就可以实现用一个函数名调用不同内容的函数。总而言之,多态就是“一个接口,多种方法”。

实现多态的条件:

1:派生类重写基类虚函数

2:通过基类指针或引用调用基类虚函数(该虚函数在派生类中必须被重写)

//c++
class base
{
public:
virtual void fun()//虚函数
{
cout << "base:;fun()" <<endl;
}
};
class derived :public base
{
public:
virtual void fun()
{
cout << "derived::fun()" << endl;
}
};
void test()
{
base b;//基类对象
derived d;//派生类对象
base* pb = &b;//父类指针指向父类对象
pb->fun();//调用base::fun()
pb = &d;//父类指针指向派生类对象
pb->fun();//调用derived::fun()
}




//C
typedef void(*fun)();//重定义一个函数指针类型

基类
struct base
{
fun b;
};

派生类
struct derived
{
base d;//在派生类中定义一个基类的对象即可实现对基类的继承
};

void funb()
{
printf("base::fun()\n");
}
void fund()
{
printf( "derived::fun()\n");
}

void test()
{
base _b;//基类对象
derived _d;//派生类对象

_b.b = funb;//基类对象调用基类同名函数
_d.d.b = fund;//派生类调用派生类的同名函数

base *pb = &_b;//基类指针指向基类对象
pb->b();

pb = (base *)&_d;//让基类指针指向派生类的对象,类型不同必须进行强转
pb->b();

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息