函数重载和重写简介c++++ 中的函数重载和重写允许同名函数具有不同的参数列表或覆盖基类中的同名函数,以实现更灵活和可扩展的代码,并遵循重要原则(如 srp、lsp、dip)。
C++ 函数重载、重写与类层次结构设计原则
简介
C++ 中的函数重载和重写是两个基础概念,对于理解和设计基于类的程序至关重要。函数重载允许同名函数具有不同的参数列表,而函数重写允许派生类中的函数覆盖基类中的同名函数。这些概念对于创建灵活且可扩展的代码库非常重要。
函数重载
函数重载允许创建具有相同名称但接受不同参数列表的函数。这对于处理不同类型和数量的输入非常有用。例如,可以创建以下函数来添加两个 int
或两个 double
:
int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }
当编译器看到 add
函数调用时,它将匹配最合适的重载版本。
函数重写
函数重写允许派生类中的函数覆盖基类中的同名函数。这用于在子类中修改或扩展基类行为。例如,以下基类和派生类重新定义了 print
函数:
class Base {
public:
void print() { cout << "Base" << endl; }
};
class Derived : public Base {
public:
void print() { cout << "Derived" << endl; }
};
当调用派生类中的 print
函数时,它将覆盖基类中的同名函数,从而打印 "Derived"
。
类层次结构设计原则
在设计类层次结构时,以下原则非常重要:
- Liskov 替换原则(LSP):子类应该随时可以替换其基类而不改变程序行为。
- 依赖倒置原则(DIP):高层模块不应该依赖低层模块,它们应该依赖抽象。
- 单一职责原则(SRP):每个类应该负责一个单一的职责。
函数重载和重写对于遵循这些原则至关重要。
实战案例
考虑一个图形应用程序,它需要处理不同形状的对象。可以使用基类 Shape
来表示所有形状,并使用派生类(如 Rectangle
和 Circle
)来表示特定形状。
class Shape {
public:
virtual double area() = 0;
};
class Rectangle : public Shape {
public:
Rectangle(double width, double height) : width(width), height(height) {}
virtual double area() override { return width * height; }
private:
double width, height;
};
class Circle : public Shape {
public:
Circle(double radius) : radius(radius) {}
virtual double area() override { return 3.14 * radius * radius; }
private:
double radius;
};
通过使用函数重写,可以轻松地计算不同形状的面积。通过遵循 SRP 原则,每个类定义了其特定职责。
结论
函数重载和重写是 C++ 中强大的概念,它们对于设计灵活和可扩展的代码至关重要。遵循类层次结构设计原则可以确保创建健壮且可维护的软件。
以上就是C++ 函数重载和重写与类层次结构的设计原则的详细内容,更多请关注编程网其它相关文章!