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

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

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;
}


目录
相关文章
|
编译器 C++
C++:类和对象(下)---对类和对象深入一些的理解
C++:类和对象(下)---对类和对象深入一些的理解
|
编译器 C++
【C++】类和对象(下)(三)
【C++】类和对象(下)(三)
|
6月前
|
存储 程序员 Python
Python类的定义_类和对象的关系_对象的内存模型
通过类的定义来创建对象,我们可以应用面向对象编程(OOP)的原则,例如封装、继承和多态,这些原则帮助程序员构建可复用的代码和模块化的系统。Python语言支持这样的OOP特性,使其成为强大而灵活的编程语言,适用于各种软件开发项目。
56 1
|
6月前
|
存储 编译器 C++
【C++】类和对象(下)
【C++】类和对象(下)
|
6月前
|
JavaScript 前端开发 Java
面向对象编程(C++篇2)——构造
面向对象编程(C++篇2)——构造
43 0
|
7月前
|
存储 编译器 C++
C++基础知识(七:多态)
多态是面向对象编程的四大基本原则之一,它让程序能够以统一的接口处理不同的对象类型,从而实现了接口与实现分离,提高了代码的灵活性和复用性。多态主要体现在两个层面:静态多态(编译时多态,如函数重载)和动态多态(运行时多态,主要通过虚函数实现)。
|
8月前
|
Python 容器
面向对象详解,面向对象的三大特征:封装、继承、多态-2
面向对象详解,面向对象的三大特征:封装、继承、多态
|
9月前
|
Java 编译器 C语言
|
9月前
|
存储 编译器 C语言
【C++类和对象】类和对象的引入(下)
【C++类和对象】类和对象的引入
|
9月前
|
编译器 C语言 C++
【C++类和对象】类和对象的引入(上)
【C++类和对象】类和对象的引入