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

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

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


目录
相关文章
|
Java
面向对象编程的三大特征:封装;继承;多态
面向对象编程的三大特征:封装;继承;多态
66 0
|
6月前
|
C++
C++一分钟之-继承与多态概念
【6月更文挑战第21天】**C++的继承与多态概述:** - 继承允许类从基类复用代码,增强代码结构和重用性。 - 多态通过虚函数实现,使不同类对象能以同一类型处理。 - 关键点包括访问权限、构造/析构、菱形问题、虚函数与动态绑定。 - 示例代码展示如何创建派生类和调用虚函数。 - 注意构造函数初始化、空指针检查和避免切片问题。 - 应用这些概念能提升程序设计和维护效率。
44 2
|
6月前
|
Python
面向对象详解,面向对象的三大特征:封装、继承、多态-1
面向对象详解,面向对象的三大特征:封装、继承、多态
|
6月前
|
Python 容器
面向对象详解,面向对象的三大特征:封装、继承、多态-2
面向对象详解,面向对象的三大特征:封装、继承、多态
|
6月前
面向对象三大特征——封装,继承
面向对象三大特征——封装,继承
|
7月前
|
C#
C# 继承、多态性、抽象和接口详解:从入门到精通
在 C# 中,可以将字段和方法从一个类继承到另一个类。我们将“继承概念”分为两类: 派生类(子类) - 从另一个类继承的类 基类(父类) - 被继承的类 要从一个类继承,使用 : 符号。 在以下示例中,Car 类(子类)继承了 Vehicle 类(父类)的字段和方法:
119 2
|
7月前
|
Java
Java面向对象编程,解释封装、继承和多态的概念。
Java面向对象编程,解释封装、继承和多态的概念。
82 2
|
7月前
掌握面向对象程序设计继承和派生机制的概念
掌握面向对象程序设计继承和派生机制的概念
47 0
|
7月前
|
编译器 C++
[C++] 面向对象的三大特性:封装、继承和多态
[C++] 面向对象的三大特性:封装、继承和多态
83 0
|
设计模式 数据安全/隐私保护
面向对象编程基础:封装、继承、多态与抽象的全面解析
面向对象编程基础:封装、继承、多态与抽象的全面解析
219 0