- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 Bruce Eckel“Thinking in C++”的帮助下学习 C++。卡在练习 30 中。这是:
If function calls to an object passed by value weren’t early-bound, a virtual call might access parts that didn’t exist. Is this possible? Write some code to force a virtual call, and see if this causes a crash. To explain the behavior, examine what happens when you pass an object by value.
我可以理解为对象调用虚函数的结果,但我无法理解如何在没有调用适当的构造函数的情况下强制编译器这样做。
有没有一种方法可以在不调用适当的构造函数或运算符(用于类型转换)的情况下将一个对象视为另一个对象?
最佳答案
Bruce 正在尝试说明对象切片,这是一种按值传递多态对象的情况。
这里是你如何做到的:
#include <iostream>
using namespace std;
struct hello {
virtual void say() { cout << "hello" << endl; }
};
struct world : public hello {
virtual void say() { cout << "world" << endl; }
};
void force(hello h) {
h.say();
}
int main() {
world w;
w.say();
force(w);
return 0;
}
此代码输出 ( link to ideone )
world
hello
即使您希望类型为 world
的对象“说”world
,而不是hello
。 C++ 编译器很聪明地注意到 w
按值传递给 hello
,因此它调整 vtable 以避免调用派生类中的方法。
world
world
吗?您可以插入单个字符。
关于c++对象的虚函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12957628/
我有一个特别的问题想要解决,我不确定是否可行,因为我找不到任何信息或正在完成的示例。基本上,我有: class ParentObject {}; class DerivedObject : publi
在我们的项目中,我们配置了虚 URL,以便用户可以在地址栏中输入虚 URL,这会将他们重定向到原始 URL。 例如: 如果用户输入'http://www.abc.com/partner ',它会将它们
我是一名优秀的程序员,十分优秀!