抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

继承和派生

新类拥有原有类的全部属性为继承!原有类产生新类的过程为派生。

原有类称为基类,产生的新类称为派生类。
http://www.dotcpp.com/course/cpp/200027.html

继承方式(派生权限)

  • 公有继承
  • 私有继承
  • 保护继承

公有继承

  • 基类中的公有成员,在派生类中仍然为公有成员。无论派生类的成员函数还是成员对象都可以访问。
  • 基类中的私有成员,无论在派生类的成员还是派生类对象都不可以访问。
  • 基类中的保护成员,在派生类中仍然是保护类型,可以通过派生类的成员函数访问,但派生类对象不可以访问!

私有继承

  • 基类中的公有和受保护类型,被派生类私有吸收后,都变为派生类的私有类型,即在类的成员函数里可以访问,不能在类外访问。
  • 基类的私有成员,在派生类类内和类外都不可以访问。

保护继承

  • 基类的公共成员和保护类型成员在派生类中为保护成员。
  • 基类的私有成员在派生类中不能被直接访问。
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
#include<iostream>
using namespace std;

class Student //基类
{
private:
int number;
public:
int Set(int number)
{
this->number=number;
return 0;
}
int Show()
{
cout<<"he or she number:"<<number<<endl;
}
};

class Score:public Student //公有继承,派生类
{
private:
int score;
public:
int set_score(int score)
{
this->score=score;
return 0;
}
int show_score()
{
cout<<"the score is :"<<score<<endl;
return 0;
}
};

int main()
{
Score A;
A.Set(17007101);
A.Show();
A.set_score(99);
A.show_score();
return 0;
}

运行结果

多继承

一个子类可以有多个父类,继承多个父类的特性
class <派生类名>:<继承方式><基类名1>,<继承方式><基类名2>,…{派生类类体}

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
#include<iostream>
using namespace std;

class Shape
{
public:
void setWidth(int w)
{
width = w;
}
void setHight(int h)
{
height = h;
}
protected:
int width;
int height;
};

class PaintCost
{
public:
int GetCost(int area)
{
return area*70;
}
};

class Rectangle: public Shape,public PaintCost //派生类
{
public:
int getArea()
{
return (width*height);
}
};

int main()
{
Rectangle Rect;
int area;

Rect.setWidth(10);
Rect.setHight(3);

area = Rect.getArea();

//输出对象面积
cout<<"Total area: "<<Rect.getArea()<<endl;

//输出总花费
cout<<"Total paint cost: "<<Rect.GetCost(area)<<endl;

return 0;


}

运行结果


评论