想不明白啊,高手帮帮忙吧
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
让我晒晒我的版本吧~
#include
#include
class Base
{
public:
virtual void print_b() {};
};
class Derived1:public Base
{
public:
virtual void print_b()
{
std::cout<<"hahaha1"<<std::endl;
}
void jessica()
{
std::cout<<cc<<std::endl;
}
void setcc(int kk)
{
cc = kk;
}
private:
int cc;
};
int main()
{
Derived1 * hh = static_cast(new Base);
hh->setcc(33);
hh->jessica();
}
结果就是输出了 33