C++面向对象程序设计
时间: 2024-12-26 13:12:54 浏览: 6
### C++ 面向对象编程概念
#### 1. 抽象 (Abstraction)
抽象是指隐藏复杂的实现细节,只暴露必要的功能给使用者。在C++中,可以通过定义类来创建自定义的数据类型,这些类可以包含成员变量和成员函数。这允许开发者专注于高层次的设计而无需关心底层的具体操作[^1]。
```cpp
class Shape {
public:
virtual double area() const = 0; // 纯虚函数表示这是一个接口方法
};
```
#### 2. 封装 (Encapsulation)
封装指的是将数据(属性)以及对该数据的操作(行为或方法)捆绑在一起形成一个整体——即类;并通过访问控制符`private`, `protected` 和 `public` 来规定哪些部分是可以被外部直接访问的,从而保护内部状态不被随意修改[^2]。
```cpp
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double getRadius() const { return radius; }
void setRadius(double new_radius) { radius = new_radius; }
double area() const override {
return M_PI * pow(radius, 2);
}
};
```
#### 3. 继承 (Inheritance)
继承让新类可以从已有的类那里获得其特性(属性和方法),这样就可以基于现有的组件构建新的更复杂的功能而不必重复编写相同的代码。子类不仅可以重用父类的方法还可以覆盖它们以提供特定的行为。
```cpp
class ColoredCircle : public Circle {
private:
std::string color;
public:
ColoredCircle(double r, const std::string& c)
: Circle(r), color(c) {}
std::string getColor() const { return color; }
void setColor(const std::string& new_color) { color = new_color; }
};
```
#### 4. 多态 (Polymorphism)
多态意味着同一个实体能够表现出不同的形式,在OOP里通常指派生类的对象能通过基类类型的引用调用到自己版本的方法。这种机制提高了系统的灵活性并简化了程序逻辑处理。
```cpp
void printArea(const Shape& shape) {
cout << "The area is: " << shape.area();
}
int main(){
Circle circle(5);
ColoredCircle colored_circle(7,"Red");
printArea(circle); // 输出圆面积
printArea(colored_circle); // 输出带颜色圆形区域大小
return 0;
}
```
上述例子展示了如何利用面向对象的思想去解决问题,并且实现了不同形状之间的通用性和差异性的平衡。每个具体形状都遵循共同的接口约定(`Shape`),但在实际计算时又各自有不同的表现方式。
阅读全文