把一个容器作为一个类的私有成员变量应该怎么初始化?

yym86202 2021-01-05 04:51:57
一个类的私有成员变量,我知道像float这种类型的可以写 void Set_max(float max)这种函数在对象中对数据进行读写操作,但是这个vector<float> value的函数应该怎么写?求知道的大神指点一下~~
private:
vector<float> value;
float min;
...全文
766 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2021-01-06
  • 打赏
  • 举报
回复
vector<float> value;//value默认就会被初始化为一个空的vector
//如果你不希望这样,比如希望value初始化为一个包含1个值为1.0f的元素,在类的构造函数中
value.push(1.0f);
yym86202 2021-01-06
  • 打赏
  • 举报
回复
引用 5 楼 qq_33487700 的回复:
你自己把 Set_width 函数定义成 static的,然后还在static成员函数里面用 this指针,编译器不报错也是遇到鬼了,你需要看看基本定义。
并没有定义static函数,我觉得出现这个是因为容器是静态得吧
yym86202 2021-01-06
  • 打赏
  • 举报
回复
引用 6 楼 真相重于对错 的回复:
先明白什么叫初始化,什么叫赋值。初始化只有一次机会,就是它诞生之时。后面的叫赋值。一般类成员的初始化都在构造函数里面进行。
所以,请把你的问题说清楚,最好有些代码,来阐述你的问题。

我新建了一个曲线类,就是想把这个容器也像 float min这样通过函数来操作,这个应该怎么写?还有最后新建对象得时候怎么写容器变量

#pragma once
#include<vector>
using namespace std;
class line
{
private:
CString name; //曲线名
float min; //最小值
float max; //最大值
Color line_color; //颜色值
int line_path; //轨道
int line_width; //线宽
vector<int> value;//曲线值
public:
void Set_name(CString name); //设置曲线名
void Set_min(float min); //设置最小值
void Set_max(float max); //设置最大值
void Set_color(Color line_color); //设置颜色
void Set_path(int line_path); //设置轨道
void Set_width(int line_width); //设置线宽
CString return_name(); //返回曲线名
float return_min(); //返回最小值
float return_max(); //返回最大值
Color return_color(); //返回颜色值
int return_path(); //返回轨道值
int return_width(); //返回线宽值
};
#include "StdAfx.h"
#include "line.h"
//#include "afxtempl.h"



line::line(void)
{
// id = yuwen = shuxue = NULL;
name = _T("");
min = 0;
max = 0;
line_color=Color(0,0,0);
line_path=0;
line_width=1;
vector<int> value??????此处怎么初始化?
}


line::~line(void)
{
//delete []name;
}
line::line( TCHAR * m_name, float m_min, float m_max,Color m_line_color,int m_line_path,int m_line_width)
{

this->name=m_name;
this->min = m_min;
this->max = m_max;
this->line_color = m_line_color;
this->line_path = m_line_path;
this->line_width = m_line_width;
}
void line::Set_name(CString m_name) //设置姓名
{
this->name= m_name;
}
void line::Set_min(float m_min) //设置最小值
{
this->min = m_min;
}
void line::Set_max(float m_max) //设置最大值
{
this->max = m_max;
}
void line::Set_color(Color m_line_color) //设置颜色
{
this->line_color = m_line_color;
}
void line::Set_path(int m_line_path) //设置轨道
{
this->line_path = m_line_path;
}
void line::Set_width(int m_line_width) //设置线宽
{
this->line_width = m_line_width;
}

CString line::return_name() //返回曲线名
{
return name;
}
float line::return_min() //返回最小值
{
return min;
}
float line::return_max() //返回最大值
{
return max;
}
Color line::return_color() //返回颜色值
{
return line_color;
}
int line::return_path() //返回轨道值
{
return line_path;
}
int line::return_width() //返回线宽值
{
return line_width;
}
line 近计数=line(_T("近计数"),16000, 22000, Color(205, 38, 38), 2, 1,vector<int> value???);
真相重于对错 2021-01-06
  • 打赏
  • 举报
回复
先明白什么叫初始化,什么叫赋值。初始化只有一次机会,就是它诞生之时。后面的叫赋值。一般类成员的初始化都在构造函数里面进行。 所以,请把你的问题说清楚,最好有些代码,来阐述你的问题。
qq_33487700 2021-01-06
  • 打赏
  • 举报
回复
你自己把 Set_width 函数定义成 static的,然后还在static成员函数里面用 this指针,编译器不报错也是遇到鬼了,你需要看看基本定义。
真相重于对错 2021-01-06
  • 打赏
  • 举报
回复
默认初始话vector里面包含了0个元素,如果要初始化一个定制大小的vector 直接 line::line(.....,int n):value(n){ ///... }
真相重于对错 2021-01-06
  • 打赏
  • 举报
回复
vector<int> value 是类成员字段,它会随着你的类实例构造的时候自动初始化,不用你操心
yym86202 2021-01-05
  • 打赏
  • 举报
回复
引用 3 楼 一颗白面馒头 的回复:
[quote=引用 2 楼 yym86202 的回复:][quote=引用 1 楼 一颗白面馒头 的回复:]
void Set_value(vector<float> value)
{this->value = value}

emmm...这样就可以了?其实就是函数参数不同,或者可以
void Add_value(float a)
{this->value.push_back(a)}

上面那种方法不行啊,我试了报错,我就是想知道怎么输入和读取到对象容器的值,显示非静态函数[/quote]
emmm...这两个函数是要设置成类的成员函数啊,属性是Public。[/quote]已经把两个函数写成员函数了,就是不能那样初始化,要是Public类型根本不用写函数了啊,直接可以操作的,但是pubic类型在对象里面没法初始化,我在数组里面调用就有问题,所以得弄成私有的,对象初始化后操作~~
一颗白面馒头 2021-01-05
  • 打赏
  • 举报
回复
引用 2 楼 yym86202 的回复:
[quote=引用 1 楼 一颗白面馒头 的回复:]
void Set_value(vector<float> value)
{this->value = value}
emmm...这样就可以了?其实就是函数参数不同,或者可以
void Add_value(float a)
{this->value.push_back(a)}
上面那种方法不行啊,我试了报错,我就是想知道怎么输入和读取到对象容器的值,显示非静态函数[/quote] emmm...这两个函数是要设置成类的成员函数啊,属性是Public。
yym86202 2021-01-05
  • 打赏
  • 举报
回复
引用 1 楼 一颗白面馒头 的回复:
void Set_value(vector<float> value)
{this->value = value}

emmm...这样就可以了?其实就是函数参数不同,或者可以
void Add_value(float a)
{this->value.push_back(a)}

上面那种方法不行啊,我试了报错,我就是想知道怎么输入和读取到对象容器的值,显示非静态函数
一颗白面馒头 2021-01-05
  • 打赏
  • 举报
回复
void Set_value(vector<float> value)
{this->value = value}
emmm...这样就可以了?其实就是函数参数不同,或者可以
void Add_value(float a)
{this->value.push_back(a)}

65,202

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧