C++ 函数重写详解:实战示例与最佳实践
C++ 函数重写详解
本指南通过清晰示例、最佳实践与分步演示,深度剖析 C++ 函数重写机制,助你编写生产级多态代码。
为什么函数重写很重要
面向对象编程中,继承让派生类扩展或修改基类行为。当基类与派生类声明同名同参数成员函数时,派生类实现会重写基类版本。通过派生类对象调用该函数,执行的是重写后的版本。
示例 1:基础重写
#include <iostream>
using namespace std;
class Base {
public:
void print() {
cout << "Base Function" << endl;
}
};
class Derived : public Base {
public:
void print() {
cout << "Derived Function" << endl;
}
};
int main() {
Derived d;
d.print();
return 0;
}
输出
Derived Function
对 Derived 实例调用 print() 执行的是重写版本,而非基类版本。

若创建 Base 对象调用 print(),则执行基类原始实现:
Base b;
b.print(); // 输出: Base Function
访问被重写的基类函数
有时需要显式调用基类版本。两种常用技巧:
- 使用作用域解析运算符
:: - 使用基类指针指向派生对象(当函数非 virtual 时)
示例 2:作用域解析调用基类函数
#include <iostream>
using namespace std;
class Base {
public:
void print() { cout << "Base Function" << endl; }
};
class Derived : public Base {
public:
void print() { cout << "Derived Function" << endl; }
};
int main() {
Derived d1, d2;
d1.print();
d2.Base::print(); // 显式调用 Base::print
return 0;
}
输出
Derived Function Base Function
示例 3:在派生类内部调用基类函数
#include <iostream>
using namespace std;
class Base {
public:
void print() { cout << "Base Function" << endl; }
};
class Derived : public Base {
public:
void print() {
cout << "Derived Function" << endl;
Base::print(); // 调用基类版本
}
};
int main() {
Derived d;
d.print();
return 0;
}
输出
Derived Function Base Function
示例 4:使用基类指针访问基类函数(非虚函数情况)
#include <iostream>
using namespace std;
class Base {
public:
void print() { cout << "Base Function" << endl; }
};
class Derived : public Base {
public:
void print() { cout << "Derived Function" << endl; }
};
int main() {
Derived d;
Base* ptr = &d; // 基类指针指向派生对象
ptr->print(); // 因非 virtual,调用 Base::print
return 0;
}
输出
Base Function
函数未声明 virtual 时,基类指针调用基类实现。要实现真正多态,需在基类声明 virtual 并在派生类重写。
这些示例阐释了 C++ 函数重写的核心机制。掌握这些概念,你能编写更清晰、可维护、有效利用多态的代码。
C语言