想不明白啊,高手帮帮忙吧
Derived1 * hh = static_cast(new Base);
hh->derivedfunction(); // 这里竟然是可以的 为什么呢 hh指向的是一个基类对象啊??
而且即使derivedfunction里面用到派生类的私有成员也是可以的,
这到底是为什么啊???
虽然语法上让你通过了,static_cast是强制类型转换,所以语法没办法阻止你错误的做法,但是实际运行结果是不对的,已经有问题了。
class A
{
public:
A() {};
~A() {};
private:
int a;
};
class B : public A
{
public:
B() { b = 1;};
~B() {};
public:
void bFun() { std::cout << "B::bFun, b=" << b << std::endl; };
private:
int b;
};
int main()
{
B* b = static_cast<B*>(new A);
b->bFun();
}
输出:
B::bFun, b=7012548
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。