#include <iostream>#include <typeinfo>class A {public: virtual void print() = 0;};class B : public A {public: void print() final { std::cout << typeid(*this).name() << std::endl; }};class C : public B {public: void print() { std::cout << typeid(*this).name() << std::endl; }};int main() { B b; C c; b.print(); c.print(); return 0;}
时间: 2024-01-09 16:04:37 浏览: 70
#include <iostream>
这是一个C++的程序。它定义了三个类A、B和C,其中A是一个抽象类,B和C都继承自A。B类重载了A类中的纯虚函数print(),并使用了final关键字表示该函数不能再被后代类重载。C类也有一个print()函数,但是它没有使用final关键字,因此可以被后代类重载。
在main函数中,创建了一个B类对象b和一个C类对象c,并分别调用它们的print()函数。由于B类的print()函数是final的,因此b.print()输出的是B类的类型名,而不是C类的类型名。c.print()输出的是C类的类型名。程序输出如下:
```
1B
1C
```
其中1表示类型名的长度。在不同的编译器和操作系统下,类型名可能有所不同。
阅读全文