C++在通过构造函数初始化对象后,用函数设置私有类成员
C++ Setting a private class member with function after the object is initialized via a constructor
在用构造函数创建对象后,我正在尝试设置一个私有类成员。此构造函数设置了一组公共成员,但不涉及私有成员。
class Tower {
std::vector<Tower> jtowers;
public:
Double_t E;
Double_t Et;
void SetJTowers( std::vector<Tower> );
std::vector<Tower> GetJTowers() { return jtowers; }
Tower ();
Tower (TLorentzVector,std::vector<Double_t>); //For jTowers
Tower (TLorentzVector,std::vector<Double_t>,std::pair<bool,bool>); //For gTowers
Tower (TLorentzVector,std::vector<Double_t>,std::pair<bool,bool>,std::vector<Tower>); //For seed gTowers
};
构造函数如下所示:
Tower::Tower (TLorentzVector FourVec,
std::vector<Double_t> otherTowerInfo,
std::pair<bool,bool> SeedRho_info) {
E = FourVec.E();
Et = FourVec.Et();
};
void Tower::SetJTowers (std::vector<Tower> constJTowers) {
jtowers = constJTowers;
};
然后,我调用一个函数,该函数接受对Tower对象的引用,做一些有趣的事情,然后尝试设置jtowers成员。
void AngularResolution :: ConstituentJTowers ( Tower& gT ) {
// Find constituent jTowers
std::vector<Tower> constJTowers;
// code to fill constJTowers
std::cout << constJTowers.size() << std::endl; // This will a nonzero size
gT.SetJTowers(constJTowers);
std::cout << gT.GetJTowers().size() << std::endl; // As will this
}
但是,当我稍后尝试在代码中检查gT.GetJTowers()的内容时,我仍然发现它是空的,就好像原始对象没有被修改一样。
感谢您的帮助!
如果您想绕过数据成员的private
访问,您必须:
- 定义setter函数
- 或者改变对CCD_ 2的访问
private
背后的原因是防止外部实体访问数据成员。
一种思想流派是提供改变变量的"setter"接口。这为外部实体提供了一种更改数据的方法。如果数据更改为其他内容,接口仍然完好无损,但实现会发生变化;从而保存对使用该接口的所有实体的更改。
另一种思想是将数据成员设为public
。这允许外部实体直接访问数据成员。如果数据成员更改了类型或位置,则所有直接访问它们的实体都需要更改。
先想想。为什么要违反封装和数据隐藏原则?有没有其他方法或设计可以让你不必破坏数据隐藏?
相关文章:
- 获取和设置函数 c++
- 重载C++中的[]运算符以支持自定义设置函数
- 将函数更改为具有设置函数输入变量的方法的类
- 设置 c/c++ 函数调用的超时
- 有没有办法根据用户参数设置函数指针?
- cppUnit:针对多个测试方法执行一次的设置函数
- 在基类和派生类之间正确设置函数的返回
- 签入构造函数与设置函数
- 如何从另一个函数指针设置函数指针
- 如何在视觉工作室 2012年设置函数输入参数的颜色
- C++:初始化结构并设置函数指针
- 设置shared_ptr并设置函数计数
- 在 c++ 中设置函数不起作用
- 在结构中设置函数
- LLVM设置函数传递的问题-命名空间问题
- 右值引用和设置函数
- 获取和设置函数与引用函数
- 设置函数等于参数
- 由于某种原因,设置函数不起作用
- 在设置函数指针之前绑定参数