【C++】面向对象的三大特性:封装、继承、多态(2)

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)

详见以上链接,点击蓝字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值