C++ 如何将一个双精度向量传递给构造函数,然后在子类(C+;+;)中访问它的数据?

C++ 如何将一个双精度向量传递给构造函数,然后在子类(C+;+;)中访问它的数据?,c++,inheritance,vector,constructor,C++,Inheritance,Vector,Constructor,我希望不仅能够创建一个图表,而且能够创建一个条形图,并传入一个双精度向量,并将该数据放入私有成员数据中。在Chart的BarChart(子)类中如何执行此操作?此外,我仍然对通过指针、引用或值进行传递感到困惑,因此我不确定在这里是否正确传递了它。请让我知道如何解决这个问题。谢谢你的帮助 #include <vector> using namespace std; class Chart { public: Chart(vector<double> &d

我希望不仅能够创建一个图表,而且能够创建一个条形图,并传入一个双精度向量,并将该数据放入私有成员数据中。在Chart的BarChart(子)类中如何执行此操作?此外,我仍然对通过指针、引用或值进行传递感到困惑,因此我不确定在这里是否正确传递了它。请让我知道如何解决这个问题。谢谢你的帮助

#include <vector>
using namespace std;
class Chart
{
  public:
    Chart(vector<double> &d) : data(d) {}
    virtual void draw() const;
  protected:
    double value_at(int index) const; // ... only allows access, not modification
    int get_size() const
    {
      return data.size();
    }
  private:
    vector<double> &data; // Now data is safely private
};

class BarChart : public Chart
{
  public:
    virtual void draw() const
    {
      for (int x = 0; x < get_size() - 1; x++)
      {
        cout << value_at(x) << " ";
        for (int y = 0; y < value_at(x); y++)
        {
          cout << "*";
        }
        cout << endl;
      }
    }
};

#include <iostream>
#include "chart.h"
#include <vector>    
int main(int argc, char** argv)
{
  vector<double> doubles;
  doubles.resize(4);
  for (int x = 0; x < 4; x++)
  {
    doubles[x] = x + 1.7;
  }
  BarChart c(doubles);
    return 0;
}

#包括
使用名称空间std;
课程表
{
公众:
图表(矢量与d):数据(d){}
虚空绘制()常量;
受保护的:
双值_at(int index)const;//…仅允许访问,不允许修改
int get_size()常量
{
返回data.size();
}
私人:
vector&data;//现在数据是安全私有的
};
类柱状图:公共图表
{
公众:
虚空draw()常量
{
对于(int x=0;x我想这就是你现在想要的。顺便说一句,你必须为你的未来阅读这些东西:)

  • 访问修饰符在继承中的工作方式
  • 构造函数如何在继承中初始化
  • 通过引用传递和通过值传递之间的区别是什么
  • 这些都是你可以在互联网上阅读的。唯一的问题是需要花一些时间来寻找和阅读

    #include <vector>
    #include <iostream>
    
    class Chart
    {
    public:
        Chart(std::vector<double> &d) : data(d) {}
        virtual void draw(){}
        double value_at(int index) const{ return data[index];} 
        int get_size() const{return data.size();} 
    private:
        std::vector<double> &data;
    };
    
    class BarChart : public Chart
    {
    public:
        BarChart(std::vector<double> &d):Chart(d)
        {
        }
        virtual void draw()
        {
            for (int x = 0; x < get_size() - 1; x++)
            {
                std::cout << value_at(x) << " ";
                for (int y = 0; y < value_at(x); y++)
                {
                    std::cout << "*";
                }
                std::cout << std::endl;
            }
        }
    };
    
    int main()
    {
        std::vector<double> barchartData;
        barchartData.push_back(10);
        barchartData.push_back(20);
        BarChart barchart(barchartData);
        std::cout << "Barchart size :" << barchart.get_size() << std::endl;
    
        std::vector<double> chartData;
        chartData.push_back(500);
        chartData.push_back(600);
        Chart chart(chartData);
        std::cout << "Chart size :" << chart.get_size() << std::endl;
        return 0;
    }
    
    #包括
    #包括
    课程表
    {
    公众:
    图表(std::vector&d):数据(d){
    虚拟空绘制(){}
    双值_at(int index)const{返回数据[index];}
    int get_size()const{return data.size();}
    私人:
    std::向量和数据;
    };
    类柱状图:公共图表
    {
    公众:
    条形图(标准::矢量和d):图表(d)
    {
    }
    虚空绘制()
    {
    对于(int x=0;xstd::cout您的数据成员是一个引用,因此您需要传递一个引用。将
    数据
    作为引用可能是一个非常糟糕的主意。如果您不打算更改数据,请将其作为常量引用。但请记住,您有责任确保引用的数据不会在
    图表
    对象之前被销毁。这将是让图表对象拥有自己的数据更可靠:通过值或通过
    共享的\u ptr
    保存它。谢谢你。它最初不是编译的,不确定问题出在哪里。但我让它工作了。这很好。有一个小逻辑问题-在类BarChart的虚拟虚空绘制方法中,它应该是x