【发布时间】:2018-11-16 15:06:31
【问题描述】:
根据标准,我们知道构造函数总是在它们内部进行虚函数的早期绑定,因为它们不完全了解派生类层次结构的缺点。
在这种情况下,如果在我的基构造函数中使用了早期绑定,我已经将派生对象传递给了一个完全可以接受的基类指针(这里进行了向上转换)。如果使用早期绑定,则虚函数的选择应该基于指针的类型(这里是 Base *)而不是指针的内容(指针指向的对象,因为我们不知道确切的对象被指出)。在这种情况下,由于指针类型是 Base *,我们应该在这两种情况下都只调用 Base 类的虚函数。有人可以澄清一下吗?
我认为这里使用动态绑定而不是早期绑定。如果我的理解有误,请纠正我。
调用base的输出的第一行完全没问题
class Base
{
public:
Base(){
fun();
}
Base(Base *p)
{
p->fun();
}
virtual void fun()
{
cout<<"In Base"<<endl;
}
};
class Derived : public Base
{
public:
void fun()
{
cout<<"In Derived"<<endl;
}
};
int main()
{
Derived d;
Base b(&d);
}
O/P:
In Base
In Derived
【问题讨论】:
-
“我们知道构造函数总是使用早期绑定”错误
标签: c++ constructor virtual-functions