面向对象特征(抽象、封装、继承、多态)的具体用法

简介: 面向对象特征(抽象、封装、继承、多态)的具体用法

1. 抽象(Abstraction)

用法示例

假设我们要为一个学校信息系统设计一个Student类,我们只需要关注学生的基本属性(如姓名、学号)和行为(如注册课程),而不必关心学生的具体个人信息细节。

class Student {
public:
    // 构造函数,初始化基本信息
    Student(std::string name, int id) : name(name), studentID(id) {}
    // 行为示例:注册课程
    void enrollCourse(const std::string& courseName) {
        courses.push_back(courseName);
    }
private:
    std::string name;          // 学生姓名
    int studentID;           // 学号
    std::vector<std::string> courses;  // 已注册课程列表
};

2. 封装(Encapsulation)

用法示例

在上面的Student类中,我们可以使用私有(private)访问修饰符来隐藏数据成员(如姓名和学号),并通过公共(public)成员函数暴露安全的操作接口。

class Student {
private:
    std::string name;
    int studentID;   
public:
    // 使用公有的getter和setter方法来封装数据
    std::string getName() const { return name; }
    void setName(const std::string& newName) { name = newName; }
    int getStudentID() const { return studentID; }
    // 注意:实际应用中,学号一般不会允许修改,这里仅作示例
    void setStudentID(int newID) { studentID = newID; }
    // 其他成员函数...
};

3. 继承(Inheritance)

用法示例

假设我们要扩展学生类型,增加一个GraduateStudent(研究生)类,它除了具有普通学生的基本属性和行为外,还额外拥有导师信息和研究方向。这时可以使用继承来复用Student类的代码。

class GraduateStudent : public Student {
public:
    GraduateStudent(std::string name, int id, std::string advisor, std::string researchArea)
        : Student(name, id), advisor(advisor), researchArea(researchArea) {} 
    // 添加特有的属性和行为
    std::string getAdvisor() const { return advisor; }
    std::string getResearchArea() const { return researchArea; }
private:
    std::string advisor;      // 导师姓名
    std::string researchArea; // 研究方向
};

4. 多态(Polymorphism)

用法示例

多态允许我们使用基类指针或引用指向派生类对象,并通过虚函数调用实际子类的实现。以Person基类和StudentTeacher派生类为例,展示多态的用法。

class Person {
public:
    virtual ~Person() {} // 虚析构函数,确保正确释放派生类资源
    virtual void introduce() const = 0; // 纯虚函数,强制派生类实现
};
 
class Student : public Person {
public:
    void introduce() const override {
        std::cout << "I am a student." << std::endl;
    }
};
class Teacher : public Person {
public:
    void introduce() const override {
        std::cout << "I am a teacher." << std::endl;
    }
};
// 使用多态
void introducePerson(const Person& p) {
    p.introduce();
}
int main() {
    Student s("Alice", 123);
    Teacher t("Bob");  
    introducePerson(s); // 输出 "I am a student."
    introducePerson(t); // 输出 "I am a teacher."  
    return 0;
}


目录
相关文章
|
9月前
|
Java
面向对象编程的三大特征:封装;继承;多态
面向对象编程的三大特征:封装;继承;多态
47 0
|
15天前
|
Python 容器
面向对象详解,面向对象的三大特征:封装、继承、多态-2
面向对象详解,面向对象的三大特征:封装、继承、多态
|
15天前
|
Python
面向对象详解,面向对象的三大特征:封装、继承、多态-1
面向对象详解,面向对象的三大特征:封装、继承、多态
|
23天前
面向对象三大特征——封装,继承
面向对象三大特征——封装,继承
|
1月前
|
Serverless PHP
当谈论面向对象编程时,这四个概念是非常重要的。以下是对接口、继承、封装和多态的简要说明
本文介绍了面向对象编程的四个核心概念:接口、继承、封装和多态。接口定义对象的行为规范,类通过实现接口确保符合所需行为。继承允许在已有类基础上创建新类,实现代码重用。封装是将数据和操作捆绑并隐藏内部细节,提高安全性和可维护性。多态使对象在运行时能表现出不同行为,增加代码灵活性和可扩展性。文中还提供了代码示例来说明这些概念。
16 0
|
1月前
|
C#
C# 继承、多态性、抽象和接口详解:从入门到精通
在 C# 中,可以将字段和方法从一个类继承到另一个类。我们将“继承概念”分为两类: 派生类(子类) - 从另一个类继承的类 基类(父类) - 被继承的类 要从一个类继承,使用 : 符号。 在以下示例中,Car 类(子类)继承了 Vehicle 类(父类)的字段和方法:
50 2
|
1月前
|
Java
Java面向对象编程,解释封装、继承和多态的概念。
Java面向对象编程,解释封装、继承和多态的概念。
49 2
|
1月前
|
编译器 C++
[C++] 面向对象的三大特性:封装、继承和多态
[C++] 面向对象的三大特性:封装、继承和多态
45 0
|
9月前
|
设计模式 数据安全/隐私保护
面向对象编程基础:封装、继承、多态与抽象的全面解析
面向对象编程基础:封装、继承、多态与抽象的全面解析
36 0
|
10月前
|
Java
面向对象编程基础:类、对象、封装、继承和多态
面向对象编程基础:类、对象、封装、继承和多态
94 0