C++类继承的定义与实现

关于C++继承

类的继承一般是父与子的关系,子类会集成父类中的一些属性及方法,但子类可能跟父类会有一些不一样的特点,其中类的继承还分为 多层继承多重继承

  • 多层继承:一般是爷爷、爸爸和儿子的关系,是有层级的。

  • 多重继承:一般是爸爸、妈妈和儿子的关系,是从多个对象中继承。

继承的概念一般是由父类定义一些基础信息,子类或派生类继承父类后会完善更多信息,最高一层是最普遍、最一般的,每一层都比它的前一层更具体,低层具有高层的特性,同时也有与高层的细微不同。

比如:
大众汽车旗下有很多子品牌,既有奥迪也有保时捷、兰博基尼等,我们定义一个大众汽车的基类有他的子类更详细的描述这个品牌的特征。

基类实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// 基类头文件
#ifndef __MYPHP_DASAUTO_H__
#define __MYPHP_DASAUTO_H__

#include <iostream>
#include <string>

namespace myphp
{
class DasAuto
{
private:
std::string brand;
int engine;

public:
DasAuto()
{
brand = "Das";
engine = 6;
};
~DasAuto() {

};

public:
void setBrand(std::string b);
std::string getBrand();
void setEngine(int e);
int getEngine();
void gogogo();
};
}; // namespace myphp
#endif

// 基类实现
#include "dasauto.h"

namespace myphp
{

void DasAuto::setBrand(std::string b)
{
brand = b;
};

std::string DasAuto::getBrand()
{
return brand;
};

void DasAuto::setEngine(int e)
{
engine = e;
};

int DasAuto::getEngine()
{
return engine;
};

void DasAuto::gogogo()
{
std::cout << "Run Auto: " << brand << " Engine: V" << engine << std::endl;
};
}; // namespace myphp

子类实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// 子类头文件
#ifndef __MYPHP_AUDIAUTO_H__
#define __MYPHP_AUDIAUTO_H__

#include "dasauto.h"

namespace myphp
{
class AudiAuto : public DasAuto
{
private:
int luxury;

public:
AudiAuto()
{
luxury = 1;
};
~AudiAuto() {

};

public:
void setLuxury(int l);
int getLuxury();
};
}; // namespace myphp
#endif // __MYPHP_AUDIAUTO_H__

// 子类实现
#include "audiauto.h"

namespace myphp
{
void AudiAuto::setLuxury(int l)
{
luxury = l;
};

int AudiAuto::getLuxury()
{
return luxury;
}
}; // namespace myphp

测试程序

1
2
3
4
5
6
7
8
9
10
11
12
#include "audiauto.h"

int main(int argc, const char *argv[])
{
myphp::AudiAuto audiAuto;
audiAuto.setBrand("Audi");
audiAuto.setEngine(8);
audiAuto.setLuxury(1);
audiAuto.gogogo();

return 0;
}