为什么派生类的指针指向基类对象 还可以调用派生类的函数?

想不明白啊,高手帮帮忙吧

Derived1 * hh = static_cast(new Base);
hh->derivedfunction(); // 这里竟然是可以的 为什么呢 hh指向的是一个基类对象啊??
而且即使derivedfunction里面用到派生类的私有成员也是可以的,
这到底是为什么啊???

2个回答

虽然语法上让你通过了,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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!