C++面向对象三大特性是什么_C++封装继承多态代码实战

C++面向对象三大特性是封装、继承和多态。1. 封装通过访问控制隐藏数据,提供安全接口;2. 继承使子类复用并扩展父类成员;3. 多态通过虚函数实现同一接口不同行为,提升程序灵活性。

C++面向对象的三大特性是封装、继承和多态。这三种机制构成了面向对象编程的核心,帮助开发者构建模块化、可复用、易维护的代码结构。下面结合具体代码实例逐一讲解。

1. 封装(Encapsulation)

封装是指将数据(成员变量)和操作数据的方法(成员函数)绑定在一起,并通过访问控制(public、private、protected)隐藏对象的内部实现细节,仅暴露必要的接口。

例如,定义一个Person类,将姓名和年龄设为私有成员,通过公共方法进行访问和修改:

#include 
#include 
using namespace std;

class Person { private: string name; int age;

public: void setName(string n) { name = n; }

void setAge(int a) {
    if (a > 0) age = a;
}

string getName() {
    return name;
}

int getAge() {
    return age;
}

void introduce() {
    cout zuojiankuohaophpcnzuojiankuohaophpcn "我是" zuojiankuohaophpcnzuojiankuohaophpcn name zuojiankuohaophpcnzuojiankuohaophpcn ",今年" zuojiankuohaophpcnzuojiankuohaophpcn age zuojiankuohaophpcnzuojiankuohaophpcn "岁。" zuojiankuohaophpcnzuojiankuohaophpcn endl;
}

};

// 使用示例 int main() { Person p; p.setName("小明"); p.setAge(20); p.introduce(); // 输出:我是小明,今年20岁。 return 0; }

这样外部无法直接访问nameage,必须通过安全的方法操作,提高了数据的安全性和可控性。

2. 继承(Inheritance)

继承允许一个类(子类)获取另一个类(父类)的属性和方法,实现代码复用。C++支持单继承和多继承。

比如,从Person派生出Student类:

class Student : public Person {
private:
    string studentId;

public: void setStudentId(string id) { studentId = id; }

void study() {
    cout zuojiankuohaophpcnzuojiankuohaophpcn getName() zuojiankuohaophpcnzuojiankuohaophpcn "正在学习。" zuojiankuohaophpcnzuojiankuohaophpcn endl;
}

};

int main() { Student s; s.setName("小红"); s.setAge(19); s.study(); // 输出:小红正在学习。 return 0; }

Student继承了Person的所有公共成员,同时可以扩展自己的属性和行为。

3. 多态(Polymorphism)

多态是指同一个接口在不同对象上表现出不同的行为。C++中通过虚函数(virtual function)和基类指针实现运行时多态。

定义一个基类Animal,并让其子类DogCat重写同一函数:

class Animal {
public:
    virtual void makeSound() {
        cout << "动物发出声音" << endl;
    }
virtual ~Animal() {} // 虚析构函数

};

class Dog : public Animal { public: void makeSound() override { cout

class Cat : public Animal { public: void makeSound() override { cout

int main() { Animal a1 = new Dog(); Animal a2 = new Cat();

a1-youjiankuohaophpcnmakeSound();  // 输出:汪汪!
a2-youjiankuohaophpcnmakeSound();  // 输出:喵喵!

delete a1;
delete a2;
return 0;

}

通过基类指针调用makeSound(),实际执行的是子类重写的版本,这就是多态的体现。

基本上就这些。封装保护数据,继承实现复用,多态提升灵活性,三者结合让C++面向对象编程更强大。