c++ - 我可以把虚函数中的这个指针当作派生类的这个指针吗
问题描述
class Base{
public:
virtual void show(){
cout<<" In Base \n";
}
};
class Derived: public Base
{
int x;
public:
void show() {
this->x = 10;
this->printX();
}
void printX(){
cout<<x;
}
};
int main(void)
{
Base *bp = new Derived;
bp->show(); // RUN-TIME POLYMORPHISM
return 0;
}
我的问题:
this->x = 10;
this->printX();
因为this
是 ( Base *
) 类型,我可以将其视为 ( Derived *
) 并调用/更改Derived
特定于类的成员吗?
解决方案
由于这是 (Base *) 类型,我可以将其视为 (Derived *) 并调用/更改 Derived 类的特定成员吗?
它不是一个Base*
. 你在范围内Derived::show
。在此范围内,其静态类型只能是Derived*
. 是否覆盖Base::show
并不影响这一点。
Derived
因此,访问in的任何成员Derived::show
都是完全合法的。这就是重写类应该如何通过使用其类特定成员来自定义行为的方式。
推荐阅读
- ios - 访问使用情节提要添加的 tableView 标头
- react-native - React Native AsyncStorage 可以用来永久存储数据吗?
- android - 为什么我不能通过 android:theme 更改hintTextAppearance?
- c# - 如何使用 c# 在 mongodb 中批量插入和更新记录
- wordpress - 如何以编程方式将模式代码插入到 wordpress 中,以便它自动适用于目标帖子类型
- spring-cloud-stream - 如何使 Spring Cloud Stream 中流中未处理异常的控制台输出静音?
- python - 如何确认一个文件中的某些子字符串是否包含在另一个文件中?
- r - 使用wellPanel时为闪亮的数据表添加滚动条
- ruby-on-rails - 如何使用 minimagick 编辑上传的图像,该图像被上传到 active_storage?
- c++ - 我是否需要使用 Gstreamer 构建 OpenCV 才能在 OpenCV 中使用 Gstreamer