南宁网站建公司电话百度人工客服在线咨询电话
面向对象编程三大核心特性:封装、继承和多态。
1. 封装
封装指的是将数据和操作这些数据的方法绑定在一起,形成一个对象,并且隐藏对象的内部实现细节,只暴露必要的接口。封装的目的是保护数据,确保外部代码不能直接访问对象的内部状态,只有通过对象提供的方法才能与数据交互。
class Person {
private:int age; // 仅在类内部访问
public:void setAge(int a) { // 通过方法设置数据if (a >= 0) age = a;}int getAge() { // 通过方法获取数据return age;}
};
2. 继承
继承允许一个类从另一个类中继承属性和方法。通过继承,子类能够复用父类的代码,并且可以对父类的方法进行扩展和修改。
-
优势:
- 代码复用:子类继承父类后,能够使用父类的已有功能,避免重复编写相同的代码。
- 可扩展性:子类可以在继承的基础上增加新的功能或修改父类的行为。
class Animal {
public:void eat() {std::cout << "Eating...\n";}
};class Dog : public Animal {
public:void bark() {std::cout << "Barking...\n";}
};Dog dog;
dog.eat(); // 从Animal继承的方法
dog.bark(); // Dog类的方法
3.多态
多态是指同一操作作用于不同的对象上,可以表现出不同的行为。多态可以通过方法重载(函数签名不同)和方法重写(子类修改父类方法的实现)来实现。
优势:
- 提高了代码的灵活性和可维护性,程序在运行时可以决定调用哪个版本的函数。
- 通过多态可以写出更加通用和可扩展的代码,减少了冗余。
class Shape {
public:virtual void draw() { // 虚函数,允许子类重写std::cout << "Drawing a shape\n";}
};class Circle : public Shape {
public:void draw() override { // 重写父类的方法std::cout << "Drawing a circle\n";}
};class Square : public Shape {
public:void draw() override { // 重写父类的方法std::cout << "Drawing a square\n";}
};void drawShape(Shape* shape) {shape->draw(); // 根据传入的具体类型调用不同的draw方法
}int main() {Shape* shape1 = new Circle();Shape* shape2 = new Square();drawShape(shape1); // 输出: Drawing a circledrawShape(shape2); // 输出: Drawing a squarereturn 0;
}
总结:
- 封装:通过隐藏实现细节和暴露接口来保护数据,确保对象的内部状态不被随意修改。
- 继承:子类可以继承父类的属性和方法,复用代码并扩展功能。
- 多态:同一接口可以根据不同对象表现出不同的行为,提高了代码的灵活性和扩展性。