虚函数如何影响 static_cast?
How does a virtual function affect static_cast?
如果我有以下代码:
#include <iostream>
class Base
{
public:
void Call(){std::cout << "Base";}
};
class Derived: public Base
{
public:
void Call(){std::cout << "Derived";}
};
int main() {
Base *base = new Base;
static_cast<Derived*>(base)->Call();
return 0;
}
电话会在Derived::Call()
但是,如果我将 Base class 中的 Call() 函数设为虚拟
#include <iostream>
class Base
{
public:
virtual void Call(){std::cout << "Base";}
};
class Derived: public Base
{
public:
void Call(){std::cout << "Derived";}
};
int main() {
Base *base = new Base;
static_cast<Derived*>(base)->Call();
return 0;
}
它调用 Base::Call()
。
在 Base class 中将函数设为虚函数如何影响 static_cast?
的行为
Base *base = new Base;
static_cast<Derived*>(base)->Call();
未定义。
"The call will be in Derived::Call()" 是一种可能的行为。 "It calls Base::Call()" 是另一种可能的行为。当未定义时,任一行为或任何其他行为都是可能的。行为可以由于添加虚函数或任何其他原因而改变或保持不变,或者只要行为未定义就没有任何原因。
如果我有以下代码:
#include <iostream>
class Base
{
public:
void Call(){std::cout << "Base";}
};
class Derived: public Base
{
public:
void Call(){std::cout << "Derived";}
};
int main() {
Base *base = new Base;
static_cast<Derived*>(base)->Call();
return 0;
}
电话会在Derived::Call()
但是,如果我将 Base class 中的 Call() 函数设为虚拟
#include <iostream>
class Base
{
public:
virtual void Call(){std::cout << "Base";}
};
class Derived: public Base
{
public:
void Call(){std::cout << "Derived";}
};
int main() {
Base *base = new Base;
static_cast<Derived*>(base)->Call();
return 0;
}
它调用 Base::Call()
。
在 Base class 中将函数设为虚函数如何影响 static_cast?
Base *base = new Base;
static_cast<Derived*>(base)->Call();
未定义。
"The call will be in Derived::Call()" 是一种可能的行为。 "It calls Base::Call()" 是另一种可能的行为。当未定义时,任一行为或任何其他行为都是可能的。行为可以由于添加虚函数或任何其他原因而改变或保持不变,或者只要行为未定义就没有任何原因。