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;
一:继承的概念
(一):类之间的关系(有三种)
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;
相关文章推荐
- C/C++学习----第二章 继承和派生
- C++程序设计- 继承与派生 【项目1】
- c++基础(继承与派生)
- c++ 类的继承与派生
- c++第四次实验-继承与派生
- 走进C++程序世界------继承和派生
- C++继承与派生
- C++ 学习(类的继承,派生)
- C/C++——继承和派生
- C++之继承与派生(3)
- C++----继承和派生
- C++ 派生与继承(一)
- C++考试篇二:继承与派生
- 【BigHereo 32】---L5---C++继承和派生
- C++之继承与派生(2)
- C++知识文档八_继承和派生
- C++讲义 第8章 继承与派生
- C/C++学习----第二章 继承和派生
- C++作业4-继承和派生1
- c++中的成员访问级别和派生继承方式