[英]Is modifying a function in derived class and accessing it by derived class object itself an example of runtime polymorphism
我正在网上阅读有关函数覆盖和运行时多态性的信息。
在阅读时,我发现了一个在programiz上覆盖函数的示例,其中给出了以下示例:
// C++ program to demonstrate function overriding
#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 derived1;
derived1.print();
return 0;
}
输出
Derived Function
在Derived
类中,我们修改了Base
类的print()
函数,并由派生类的对象derived1
访问。
一个问题一直萦绕在我的脑海中——这也是运行时多态性的一个例子吗? 或运算符覆盖并不总是属于运行时多态性,因为我在某处读过这个
虚函数的主要用途是实现运行时多态性。运行时多态性只能通过基类类型的指针(或引用)来实现。
因此,我的问题是——“这是运行时多态性的一个例子吗,因为它不使用virtual
关键字,而是涉及一个指向基类的指针,甚至是一个函数覆盖的例子?
如果我提到任何错误,请纠正我。
这不是运行时多态性。
该站点也没有声明,但它错误地使用了术语“覆盖”(或者至少没有使用通常的技术含义)。 只能覆盖virtual
函数,然后覆盖提供运行时多态性。
该站点演示的只是类成员的(编译时静态)名称查找规则。 没有多态性或覆盖。 C++ 只允许在不同的命名空间和类中具有相同名称的实体,并且有关于如何决定给定表达式名称中的哪些实体的规则。 这些实体根本不相关。 例如,您可以有一个静态数据成员static int mem;
在基类和非静态成员函数中void mem();
在派生类中。 如果你写obj.mem
它将是静态数据成员(如果obj
的静态类型是基类)或非静态成员函数(如果obj
的静态类型是派生类)。 这些显然彼此无关。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.