如何将双精度向量传递给构造函数,然后在子类中访问其数据(在 C++ 中)?
Posted
技术标签:
【中文标题】如何将双精度向量传递给构造函数,然后在子类中访问其数据(在 C++ 中)?【英文标题】:How do I pass in a vector of doubles to a constructor and then access its data in child classes (in C++)? 【发布时间】:2014-07-17 06:30:54 【问题描述】:我希望不仅能够创建图表,还希望能够创建条形图,并传入一个双精度向量并将该数据放入私有成员数据中。我将如何在图表的条形图(子)类中执行此操作?此外,我仍然对通过指针、引用或值传递感到困惑,所以我不确定我是否在此处正确传递它。请让我知道如何解决这个烂摊子。感谢您的帮助!
#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;
【问题讨论】:
你的数据成员是一个引用,所以你需要传递一个引用。 将data
设为参考可能是个非常糟糕的主意。
如果您不打算更改数据,请将其设为 const 引用。但请记住,您有责任确保在Chart
对象之前不会破坏引用的数据。让 Chart 对象拥有自己的数据会更加健壮:要么按值保存,要么通过 shared_ptr
保存。
【参考方案1】:
我想这就是你现在想要的。顺便说一句,你必须为你的未来阅读这些东西:)
-
访问修饰符在继承中的工作原理
构造函数如何在继承中初始化
引用传递和值传递有什么区别。
这些都是你可以在互联网上阅读的。只是需要花一些时间来查找和阅读。
#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() constreturn 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;
【讨论】:
谢谢你。一开始没有编译,不知道是什么问题。但我得到了它的工作。这很好用。有一个小的逻辑问题 - 在 BarChart 类的虚拟 void 绘制方法中,它应该是 x以上是关于如何将双精度向量传递给构造函数,然后在子类中访问其数据(在 C++ 中)?的主要内容,如果未能解决你的问题,请参考以下文章
我将向量作为双精度传递给函数,但视觉工作室将其称为无符号整数
如何将向量传递给基于推力的 odeint 观察者的构造函数,以便可以在函子中读取它
如何将子类作为期望基类的函数的参数传递,然后将该对象传递给指向这些抽象类对象的指针向量?