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

C++ 之 继承和派生(1)

2017-09-21 19:47 176 查看
最近在学习C++的继承和派生查看了一些网站和资料做了一些整理。

一:继承的概念

(一):类之间的关系(有三种)

Has - A:  包含关系,用以描述一个类由多个“部件类”构成。实现has-A关系用类成员表示,即一个类中的数据成员是另一种已经定义的类。

Use - A:  一个类部分地使用另一个类。通过类之间成员函数的相互联系,定义友员或对象参数传递实现。

Is - A:      机制称为“继承”。关系具有传递性,不具有对称性。

(二):继承关系

继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承类似,例如儿子继承父亲的财产。

继承(Inheritance)可以理解为一个类从另一个类获取成员变量和成员函数的过程。例如类 B 继承于类 A,那么 B 就拥有 A 的成员变量和成员函数。被继承的类称为父类或基类,继承的类称为子类或派生类。

派生类除了拥有基类的成员,还可以定义自己的新成员,以增强类的功能。

以下是两种典型的使用继承的场景:

1) 当你创建的新类与现有的类相似,只是多出若干成员变量或成员函数时,可以使用继承,这样不但会减少代码量,而且新类会拥有基类的所有功能。

2)当你需要创建多个类,它们拥有很多相似的成员变量或成员函数时,也可以使用继承。可以将这些类的共同成员提取出来,定义为基类,然后从基类继承,既可以节省代码,也方便后续修改成员。

(三):继承概念

①定义:

继承是使用已经遍好的类来创建新类,新的类具有原有类的所有属性和操作,也可以在原有类的基础上做一些修改和增补。

新类成为派生类或子类,原有类成为基类或父类。

派生类是基类的具体化。

在C++语言中,一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承;从多个基类派生的继承称为多继承。

②派生类的定义格式

单继承的定义格式如下:

class <派生类名> : <继承方式> <基类名>

{

<派生类新定义成员>

};

其中,class是关键词,<派生类名>是新定义的一个类的名字,它是从<基类名>中派生的,并且按指定的<继承方式>派生的。<继承方式>常使用如下三种关键字给予表示:

public 表示公有基类;

private 表示私有基类;

protected 表示保护基类;

多继承的定义格式如下:

class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…

{

<派生类新定义成员>

};

可见,多继承与单继承的区别从定义格式上看,主要是多继承的基类多于一个。

如果省略继承方式,对'class'将采用私有继承,对'struct'将采用公有继承。

也就是说

class Base1{};

struct Base2{};

class Derive:Base1,Base2{};

那么,Derive类将私有继承Base1,公有继承Base2。相当于:

class Derive:private Base1,public Base2{};

③继承的一些性质:

1、子类拥有父类的所有成员变量和成员函数

2、子类可以拥有父类没有的方法和属性

3、子类就是一种特殊的父类

4、子类对象可以当作父类对象使用

④举例:

基类: 动物 Animal ,属性是 名字,年龄。

派生类:熊猫Panda,除了具有动物的属性名字和年龄外,还具有独特的吃竹子的属性。

狗 dog, 除了具有动物的属性名字和年龄外,还具有独特的看家的属性。

代码:#include <stdio.h>
#include <string.h>
//动物类
class Animal
{
public:
void SetAnimal (char *name, int age)
{
strcpy(M_name, name);
M_age = age;
}
void print ()
{
printf ("名字:%s\n", M_name);
printf ("年龄:%d\n", M_age);
}
void printA ()
{
printf ("我是动物\n");

}
public:
int M_age;
char M_name[20];
};

//熊猫类
class Panda : public Animal
{
public:
void DoSome()
{
printf("我是熊猫正在啃竹子\n");
}

};

//狗类
class Dog :public Animal
{
public:
void DoSome()
{
printf("我是小狗正在看家\n");
}
};

int main1_1 ()
{
Panda p1;
Dog d1;

p1.SetAnimal("papa", 5);
p1.print();
p1.DoSome();
p1.printA();

d1.SetAnimal("dudu", 3);
d1.print();
d1.DoSome();
d1.printA();

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