C++实现多态的时候父类指针如何调用子类独有的数据成员

C++实现多态的时候父类指针如何调用子类独有的数据成员?

class father{
public:
    int m_a;
};

class son:public father{
public:
    int m_b;
};

int main(){
    father*  p1 = new father();
    father->m_a = 1;   //可行
    father->m_b = 0;   //失败
}

如代码,在遇到这种问题的时候如何解决,或者多态应该如何体现,使用父类指针是否不太方便呢

如果要在父类指针中访问子类中独有的数据成员,可以使用类型转换将父类指针转换成子类指针,然后再访问子类中的数据成员。


例如,可以使用如下代码访问子类中的数据成员:

son* p2 = static_cast<son*>(p1); // 将 p1 转换成 son 类型的指针
p2->m_b = 0; // 访问子类独有的数据成员

通常面向对象不是这个玩法, 父类一般不要有自己的成员, 当然你要有也没人拦着.

多态是由虚函数实现的.

#include <iostream>

class father
{
  public:
    father() = default;
    virtual ~father() = default;
    virtual auto getNum() -> int = 0;
};

class son1 : public father
{
    int m_a = 0;

  public:
    auto getNum() -> int override
    {
        return m_a;
    }
};

class son2 : public father
{
    int m_b = 1;

  public:
    auto getNum() -> int override
    {
        return m_b;
    }
};

auto main() -> int
{
    father *ptrFather1 = new son1();
    father *ptrFather2 = new son2();

    int testA = ptrFather1->getNum();
    int testB = ptrFather2->getNum();

    std::cout << testA << ' ' << testB << std::endl;

    delete ptrFather1;
    delete ptrFather2;

    return 0;
}

在C++中,父类指针只能访问父类中定义的成员,不能访问子类中定义的成员。如果想要访问子类中定义的成员,需要将父类指针强制转换为子类指针。