1、面向对象的三大特性:封装、继承、多态——【C++】面向对象的三大特性:封装、继承、多态(1)
详见以上链接,点击蓝字。
2、C++的封装是如何实现的?
在C++中,封装(Encapsulation)主要通过访问控制修饰符(Access Specifiers)和类(Class)机制来实现。C++允许程序员控制类内部成员(变量和方法)的可访问性,从而隐藏实现细节,并提供受控的接口。
(1)访问控制修饰符
- private(私有):仅限于类内部访问,外部无法直接访问。
- protected(受保护):只能在类内部和子类中访问,外部不能访问。
- public(公共):可以在类的外部访问。
访问修饰符 | 类内部 | 子类(继承) | 类外部 |
---|---|---|---|
private | ✅ 允许 | ❌ 不允许 | ❌ 不允许 |
protected | ✅ 允许 | ✅ 允许 | ❌ 不允许 |
public | ✅ 允许 | ✅ 允许 | ✅ 允许 |
#include <iostream>
using namespace std;
class Person {
private:
string name; // 私有成员变量,外部无法直接访问
protected:
int age; // 受保护成员变量,派生类可以访问
public:
// 构造函数
Person(string n, int a) {
name = n;
age = a;
}
// 公开方法,提供访问私有数据的接口
void setName(string n) {
name = n;
}
string getName() {
return name;
}
void setAge(int a) {
if (a >= 0) age = a;
}
int getAge() {
return age;
}
// 公开方法,展示信息
void displayInfo() {
cout << "Name: " << name << ", Age: " << age << endl;
}
};
// Student 继承自 Person
class Student : public Person {
private:
int studentID; // 私有成员变量,外部无法访问
public:
// 构造函数
Student(string n, int a, int id) : Person(n, a) {
studentID = id;
}
// 公开方法访问私有成员
void setStudentID(int id) {
studentID = id;
}
int getStudentID() {
return studentID;
}
// 访问受保护成员变量 age
void showStudentInfo() {
cout << "Student Name: " << getName() << ", Age: " << age << ", ID: " << studentID << endl;
}
};
int main() {
Person person("Alice", 30);
person.displayInfo();
Student student("Bob", 20, 1001);
student.showStudentInfo();
// person.age = 40; // ❌ 错误:受保护成员不能被外部直接访问
// person.name = "Charlie"; // ❌ 错误:私有成员不能被外部直接访问
student.setAge(22); // ✅ 可以通过公共方法修改 age
student.showStudentInfo();
return 0;
}
(2)友元(friend)
C++提供friend关键字,让某个函数或类可以访问private成员。友元破坏了封装性,但在某些情况下(如操作符重载)是必要的。
class Car {
private:
int speed;
public:
Car(int s) : speed(s) {}
// 声明友元函数
friend void showSpeed(Car c);
};
// 友元函数可以访问私有变量
void showSpeed(Car c) {
cout << "Speed: " << c.speed << " km/h" << endl;
}
int main() {
Car car(100);
showSpeed(car); // 友元函数可以访问 private 变量
return 0;
}
3、C++的继承是如何实现的?——【C++】面向对象的三大特性:封装、继承、多态(3)
详见以上链接,点击蓝字。
4、C++的多态是如何实现的?——【C++】面向对象的三大特性:封装、继承、多态(4)
详见以上链接,点击蓝字。