如何在C++中將一個類的對象存儲為另一個類?

假設我有兩門課:

class A {
public:
    A() {/*...*/}
};

class B {
public:
    B() {/*...*/}
};

并存儲類A的對象的向量:

std::vector<A*> objects;

如何將類B的對象添加到向量中?我的第一個想法是使用派生類。它是有效的,但類A中可能有一些函數不會被類B中的任何對象使用。例如:

class A {
public:
    virtual ~A() {};
    A() {/*...*/}
    void doSomething() {/*...*/}
    int returnSomething() {/*...*/}
};

class B : public A {
public:
    B() {/*...*/}
    void doSomethingDifferent() {/*...*/}
    int returnSomethingDifferent() {/*...*/}
};

objects.push_back(objectOfClassB);有效。但是,當我處理類B的對象時,我永遠不會使用類A中聲明的函數(或變量)。

在不使用派生類的情況下,如何將一個類的對象存儲為另一個類?或者,有沒有一種替代的解決方案,完全不這樣做,而是對它的存儲方式做一些不同的事情?

? 最佳回答:

std::variant將在C++17或更高版本中實現這一功能(請參閱下面的示例),盡管在某些情況下,您可能會發現只聲明單獨的vector<A>vector<B>對象更容易。

#include <iostream>
#include <variant>
#include <vector>

class A
{
public:
    A() : _x(0) {/*...*/}
    A(int x) : _x(x) {/*...*/}

    int getX() const {return _x;}

private:
    int _x;
};

class B
{
public:
    B() : _y(0.0f) {/*...*/}
    B(float y) : _y(y) {/*...*/}

    float getY() const {return _y;}

private:
    float _y;
};

int main(int, char **)
{
   std::vector< std::variant<A, B> > v;

   v.push_back(A(777));
   v.push_back(B(3.14159f));

   for (auto item : v)
   {
      const A * a = std::get_if<A>(&item);
      if (a)
      {
         std::cout << "The A object has int value x=" << a->getX() << std::endl;
      }
      else
      {
         const B * b = std::get_if<B>(&item);
         if (b)
         {
            std::cout << "The B object has float value y=" << b->getY() << std::endl;
         }
         else
         {
            std::cout << "Hmm, I'm not sure what item is!" << std::endl;
         }
      }
   }

   return 0;
}
主站蜘蛛池模板: 另类国产精品一区二区| 国产在线第一区二区三区| 在线观看国产一区亚洲bd| 国偷自产av一区二区三区| 色综合视频一区二区三区44| 色综合视频一区二区三区44| 国产一区二区三区在线看| 大伊香蕉精品一区视频在线| 国产在线观看精品一区二区三区91| 少妇特黄A一区二区三区| 久久人妻内射无码一区三区 | 精品乱码一区二区三区在线| 亚洲一区二区三区四区视频| 国产亚洲福利精品一区| 免费观看一区二区三区| 狠狠综合久久AV一区二区三区| 国产精品亚洲产品一区二区三区| 国产精品美女一区二区| 日本福利一区二区| 国产伦精品一区二区三区无广告| 无码一区二区三区在线| 国产精品日韩一区二区三区| 国产乱码精品一区二区三区四川| 日美欧韩一区二去三区| 波多野结衣中文一区二区免费| 国产精品一区二区久久乐下载| 国产午夜一区二区在线观看| 午夜精品一区二区三区在线观看| 精品一区精品二区| 国产精品成人一区二区| 国产无线乱码一区二三区| 亚洲AV无码一区二区三区系列 | 99久久精品日本一区二区免费 | 天堂国产一区二区三区| 亚洲福利一区二区精品秒拍| 国产伦精品一区二区三区不卡 | 日韩精品成人一区二区三区| a级午夜毛片免费一区二区| 高清一区二区三区免费视频| 蜜桃视频一区二区三区在线观看| 精品少妇人妻AV一区二区三区|