访问一个派生类C ++的私有成员[复制](Accessing private members of

2019-09-27 04:46发布

这个问题已经在这里有一个答案:

  • 不能从型基类的指针访问派生类的方法 3答案

我试图通过基类对象来访问派生类的私有成员。 这里是我想要做的事:

 class A {

      private:

           int a, b;

      public:
           A(_a, _b) : a(_a), b(_b) {}
           int getA() { return a; }
           int getB() { return b; }
 };

 class B : public A {

      private:
           int c;

      public:
           B(_a, _b, _c) : A(_a, _b), c(_c) {}
           int getC() { return c; }

 };

 vector<A*> objects;
 A* retVal = new B(1,2,3);
 objects.push_back(retVal);

现在怎么可能访问此?

 objects[0] -> getC();

我有点困惑。

提前致谢。

Answer 1:

如果你知道的对象实际上是派生类型B ,你可以这样做:

static_cast<B*>(objects[0])->getC();

如果你是错误的,对象是不实际类型B (或子类B ),你的程序将调用不确定的行为,所以不这样做。



Answer 2:

您可以在基类中提供了一个纯虚函数

 class A {

      private:

           int a, b;

      public:
           A(_a, _b) : a(_a), b(_b) {}
           int getA() { return a; }
           int getB() { return b; }
           virtual int getC() = 0;
 };

 class B : public A {

      private:
           int c;

      public:
           B(_a, _b, _c) : A(_a, _b), c(_c) {}
           virtual int getC() { return c; }

 };


Answer 3:

我没有看到任何干净的方式做你想做的。 我认为这是在与继承是指在C ++中使用的方式赔率:如果你的派生类中增加了新的方法,那么它应该被视为一个新的类型,即东西不仅仅是一个基本型的变形更多。 (你正在尝试做的是比较客观的-C样的理念,在方法的调用都解决了运行时间。)我的建议是重新考虑你的设计,并保持从A-对象概念分离B-对象。



文章来源: Accessing private members of a derived class C++ [duplicate]