作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已经阅读了有关 vtable 的内容,并理解了指向基类和派生类对象的基类指针的概念。有人可以解释当基类和派生类都是对象并且派生类对象被分配给基类对象时如何创建 vtable 的情况。以下示例中的情况 3
#include <iostream>
#include <exception>
using namespace std;
class Base
{
public:
virtual void function1() { cout<<"Base - func1"<<endl; }
virtual void function2() { cout<<"Base - func2"<<endl; }
};
class Derived1: public Base
{
public:
virtual void function1() { cout<<"Derived1 - func1"<<endl; }
};
class Derived2: public Base
{
public:
virtual void function2() { cout<<"Derived2 - func2"<<endl; }
};
int main ()
{
// Case 1
Base* B1 = new Derived1();
B1->function1();
B1->function2();
// Case 2
cout<<endl;
Base* B2 = new Derived2();
B2->function1();
B2->function2();
// Case 3
cout<<endl;
Base B3;
Derived1 D1;
B3=D1;
B3.function1();
B3.function2();
}
输出:
Derived1 - func1
Base - func2
Base - func1
Derived2 - func2
Base - func1
Base - func2
最佳答案
B3=Derived;
是对象切片的一个例子...只分配给基类数据成员,vtable指针继续指向基类类函数。
你应该避免切片 - 它可能很危险(参见 this answer 的解释)。现在你知道这个术语了,你会很容易找到大量关于对象切片的读物....
关于c++ - 使用基对象和派生对象的虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31133762/
我有一个特别的问题想要解决,我不确定是否可行,因为我找不到任何信息或正在完成的示例。基本上,我有: class ParentObject {}; class DerivedObject : publi
在我们的项目中,我们配置了虚 URL,以便用户可以在地址栏中输入虚 URL,这会将他们重定向到原始 URL。 例如: 如果用户输入'http://www.abc.com/partner ',它会将它们
我是一名优秀的程序员,十分优秀!