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

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

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
面向对象编程的三大特征:封装;继承;多态
面向对象编程的三大特征:封装;继承;多态
57 0
|
7天前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
4月前
|
Python 容器
面向对象详解,面向对象的三大特征:封装、继承、多态-2
面向对象详解,面向对象的三大特征:封装、继承、多态
|
4月前
|
Python
面向对象详解,面向对象的三大特征:封装、继承、多态-1
面向对象详解,面向对象的三大特征:封装、继承、多态
|
4月前
面向对象三大特征——封装,继承
面向对象三大特征——封装,继承
|
5月前
|
数据安全/隐私保护 C++
C++类与对象【封装】
C++类与对象【封装】
|
5月前
|
Java
Java面向对象编程,解释封装、继承和多态的概念。
Java面向对象编程,解释封装、继承和多态的概念。
66 2
|
5月前
|
编译器 C++
[C++] 面向对象的三大特性:封装、继承和多态
[C++] 面向对象的三大特性:封装、继承和多态
69 0
|
设计模式 数据安全/隐私保护
面向对象编程基础:封装、继承、多态与抽象的全面解析
面向对象编程基础:封装、继承、多态与抽象的全面解析
82 0
|
Java
面向对象编程基础:类、对象、封装、继承和多态
面向对象编程基础:类、对象、封装、继承和多态
102 0
下一篇
无影云桌面