C++派生类与基类成员的支配规则解析

需积分: 14 1 下载量 74 浏览量 更新于2024-08-19 收藏 8.81MB PPT 举报
"支配规则-C++学习材料" C++中的支配规则(Overriding Rules)是关于继承和多态性的一个核心概念。在C++中,当一个派生类从基类继承时,可能会出现同名成员函数或数据成员。支配规则决定了在这样的情况下,如何正确地调用正确的成员。如果派生类中定义了一个与基类中相同名称和参数列表的成员函数,那么在派生类的对象中,这个函数会“支配”基类中的同名函数,即优先调用派生类中的版本,这就是所谓的重写(Override)。 在给定的描述中提到的实例: ```cpp class A { public: int x; A() { x = 1; } }; class D : public A { public: int x; D() { v.x = 5; } void v() { x = 5; } }; ``` 在这个例子中,`D`类从`A`类派生,两者都含有名为`x`的数据成员。在`D`类的构造函数中,`v.x = 5;`实际上是在调用派生类`D`的`x`,而不是基类`A`的`x`,因为派生类的成员在作用域中支配基类的同名成员。同样,如果`D`类有一个与基类`A`同名的成员函数,比如`void v()`,那么在派生类对象上调用`v()`时,将执行派生类的版本,而不是基类的。 支配规则的应用不仅限于成员函数,还包括虚函数(Virtual Functions)。在C++中,虚函数允许在运行时动态绑定到正确的函数实现,即使函数是在基类中声明的,但在派生类中被重写。当基类指针或引用指向派生类对象,并调用虚函数时,会调用派生类中的版本,即使在基类中调用。例如: ```cpp class A { public: virtual void f() { cout << "A::f()" << endl; } }; class D : public A { public: void f() override { cout << "D::f()" << endl; } }; A* ptr = new D(); ptr->f(); // 这将输出 "D::f()",遵循支配规则 ``` 支配规则是C++面向对象编程的关键特性,它确保了多态性和代码的灵活性。然而,这也要求程序员明确了解作用域和类型转换,以避免可能的混淆和错误。正确理解和使用支配规则能够提高代码的可扩展性和维护性,是成为专业C++程序员必备的知识点。