C++面向对象提高

2

C++面向对象提高

  之前介绍了C++面向对象的基础内容,其中引入了public关键字,这时C++面向对象的一种访问控制权限,这非常重要,可以更灵活的使用我们创建的类和对象,保护类中的内容,不被其他人调用。今天带小伙们看一看C++中的三种访问控制权限,与Java稍有不同,Java中包括四类访问控制权限,以后再给小伙伴介绍。

访问控制权限

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include<iostream>
using namespace std;

class Father {

//成员关键字
//public关键字:类内可以访问,子类可以访问,类外可以访问
public:
string name;

Father() {
cout << "我是父类的构造函数" << endl;
}

~Father() {
cout << "我是父类的析构函数" << endl;
}

void setName(string name) {
this->name = name;
}

string getName() {
return this->name;
}

void setAge(int age) {
this->age = age;
}

int getAge() {
return this->age;
}

void setMoney(int money) {
this->money = money;
}

int getMoney() {
return this->money;
}

//protected关键字:类内可以访问,子类可以访问,类外不可以访问
protected:
int age;

//private关键字:类内可以访问,子类不可以访问,类外不可以访问
private:
int money;

};

//继承:面向对象的第二大特点,可以获取父类的部分成员,实现代码的复用。
//语法是class 子类名:继承方式 父类名
//继承关键字
//public关键字:继承父类的public,protected成员变量和成员函数,并且保持不变
//protected关键字:继承父类的public,protected成员变量和成员函数,并且都将变为protected类型
//public关键字:继承父类的public,protected成员变量和成员函数,并且都将变为private类型
class Son :public Father {

public:
//在子类中,可以定义父类没有的成员,在父类中无法获取子类成员,但是子类可以获取父类成员。
int score;

Son() {
cout << "我是子类的构造函数" << endl;
}

~Son() {
cout << "我是子类的析构函数" << endl;
}

//因为name在父类是public的,因此在子类中可以访问
void printName() {
cout << this->name;
}

//因为age在父类是protected的,因此在子类中可以访问
//但是money成员变量,在父类中是private的,在子类中无法访问
void printAge() {
cout << this->age;
}

};

int main() {

{
//创建父类的对象,调用父类的构造函数
Father f;
//因为name是public的,所以可以直接进行访问和修改
f.name = "father";
cout << "我的名字是:" << f.name << endl;
//因为age是protected的,所以不可以直接进行访问和修改
//引入set和get方法,可以实现对protected或这private成员进行类内修改。
f.setAge(40);
cout << "我的年龄是:" << f.getAge() << endl;
//因为age是private的,所以不可以直接进行访问和修改
f.setMoney(1000000);
cout << "我的存款是:" << f.getMoney() << endl;
//当花括号结束时,创建的父类对象会被析构,调用析构方法
}

cout << "********************" << endl;

{
//继承的特点:
//1.父类中的所有非静态成员都会被子类继承,只是私有的会被编译器隐藏,在子类中不可见。
//2.具有继承关系的构造函数,首先调用父类的构造函数,初始化属性,然后再调用子类的构造函数,析构时顺序相反。
//3.子类与父类具有相同的成员时,默认访问子类的成员,可以通过作用域访问父类的成员,父类名::父类成员即可。
//4.如果在子类中访问父类的静态成员,需要通过子类名::父类名::父类静态成员名。
//创建子类对象,因此即会打印父类的构造函数,也会打印子类的构造函数。
Son s;
//name是父类的public属性,而且通过public继承,因此可以访问
s.name = "son";
cout << "我的名字是:" << s.name << endl;
//setAge是父类的public属性,而且通过public继承,因此可以访问
s.setAge(20);
cout << "我的年龄是:" << s.getAge() << endl;
//setMoney是父类的public属性,而且通过public继承,因此可以访问
s.setMoney(100);
cout << "我的存款是:" << s.getMoney() << endl;
s.score = 90;
cout << "我的成绩是:" << s.score << endl;
//当花括号结束时,创建的子类对象会被析构,注意子类对象析构时的顺序
}

return 0;
}

1

C++小结

  今天给大家介绍三种C++的访问控制权限以及继承的基本概念,这对于C++的学习非常重要,因此小伙伴们务必掌握它。

-------------本文结束感谢您的阅读-------------
0%