C++ 语言标准对函数重载和重写的规范
函数重载允许在同一作用域内定义同名函数,但要求参数列表不同;而函数重写允许在派生类中定义与基类同名、同参数列表的函数,要求带有 override 关键字,返回类型和参数列表与基类函数完全相同。重载示例:print(int),print(double);重写示例:derived 类中的 foo() 重写了 base 类中的 foo()。
C++ 语言标准对函数重载和重写的规范
函数重载
重载允许在同一个作用域内使用相同名称定义多个函数,但其参数列表必须不同。C++ 语言标准要求函数重载遵循以下规范:
返回类型必须相同。
参数列表必须不同,即参数的数量、类型或顺序。
const、volatile 和引用限定符可以被用来区分重载的函数。
示例:
void print(int x);
void print(double x);
函数重写
重写允许在派生类中定义一个与基类中同名同参数列表的函数。C++ 语言标准要求函数重写遵循以下规范:
重写函数必须带有 override 关键字。返回类型必须与基类函数相同。参数列表必须与基类函数完全相同(包括类型、顺序和限定符)。派生类函数不得比基类函数的访问权限更低(即 protected 只能重写 protected 或 public 函数)。
示例:
class Base {
public:
virtual void foo();
};
class Derived : public Base {
public:
override void foo() override; // 重写基类中的 foo
};
实战案例
函数重载:
#include <iostream>
using namespace std;
void print(int x) {
cout << "int: " << x << endl;
}
void print(double x) {
cout << "double: " << x << endl;
}
int main() {
print(10); // 调用 int 版本的 print
print(3.14); // 调用 double 版本的 print
return 0;
}
函数重写:
#include <iostream>
using namespace std;
class Shape {
public:
virtual void draw() = 0; // 纯虚函数
};
class Rectangle : public Shape {
public:
void draw() override {
cout << "Drawing a rectangle" << endl;
}
};
int main() {
Rectangle r;
r.draw(); // 调用 Rectangle 类中的重写函数
return 0;
}
相关推荐
-
C++ 函数返回泛型类型时需要注意什么?
在 c++++ 中返回泛型类型时,需要声明返回类型并使用 template 关键字。约束类型参数以确保符合特定要求,并可以返回泛型容器。谨慎使用泛型,尤其涉及算术运算时。C++ 函数返回泛型类型时的注
-
Golang函数库的社区和支持资源
golang 函数库社区提供支持,包括论坛、slack 社区和 stack overflow。官方和社区文档提供有关函数库的全面信息。第三方资源提供交叉引用、代码示例和教程。实战案例展示了 loggi
-
C++ 函数的形参和实参的关系是什么?
函数形参和实参的关系:形参是函数头中声明的占位符,实参是函数调用时传入的实际值。对形参的修改不会影响实参,除非它们是引用传递的,即实参和形参都使用引用类型(&)。理解这一关系对于正确使用函数至关重要。
-
golang函数的泛型
Go 语言中的函数泛型泛型函数允许您为各种类型定义通用函数,从而提高代码的可重用性和灵活性。语法泛型函数的语法如下:func 函数名[T any](参数列表) 返回值类型 { //
-
C++ 函数重载与重写的异同分析
函数重载和重写的异同点:相同点:提供函数的多组变体,名称重用简化代码。不同点:作用域:重载在同一作用域,重写在不同作用域。参数或返回类型:重载参数类型不同,重写允许参数类型或返回类型不同。目的:重载扩