C++ 如何将一个双精度向量传递给构造函数,然后在子类(C+;+;)中访问它的数据?
我希望不仅能够创建一个图表,而且能够创建一个条形图,并传入一个双精度向量,并将该数据放入私有成员数据中。在Chart的BarChart(子)类中如何执行此操作?此外,我仍然对通过指针、引用或值进行传递感到困惑,因此我不确定在这里是否正确传递了它。请让我知道如何解决这个问题。谢谢你的帮助C++ 如何将一个双精度向量传递给构造函数,然后在子类(C+;+;)中访问它的数据?,c++,inheritance,vector,constructor,C++,Inheritance,Vector,Constructor,我希望不仅能够创建一个图表,而且能够创建一个条形图,并传入一个双精度向量,并将该数据放入私有成员数据中。在Chart的BarChart(子)类中如何执行此操作?此外,我仍然对通过指针、引用或值进行传递感到困惑,因此我不确定在这里是否正确传递了它。请让我知道如何解决这个问题。谢谢你的帮助 #include <vector> using namespace std; class Chart { public: Chart(vector<double> &d
#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;x std::cout您的数据成员是一个引用,因此您需要传递一个引用。将数据
作为引用可能是一个非常糟糕的主意。如果您不打算更改数据,请将其作为常量引用。但请记住,您有责任确保引用的数据不会在图表
对象之前被销毁。这将是让图表对象拥有自己的数据更可靠:通过值或通过共享的\u ptr
保存它。谢谢你。它最初不是编译的,不确定问题出在哪里。但我让它工作了。这很好。有一个小逻辑问题-在类BarChart的虚拟虚空绘制方法中,它应该是x