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
基类和Student
、Teacher
派生类为例,展示多态的用法。
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; }