Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 重构变量自动访问_C++_Eclipse_Oop_Encapsulation_Automated Refactoring - Fatal编程技术网

C++ 重构变量自动访问

C++ 重构变量自动访问,c++,eclipse,oop,encapsulation,automated-refactoring,C++,Eclipse,Oop,Encapsulation,Automated Refactoring,我已将对类变量的访问权限从公共更改为私有 然后创建了100个变量的getter和setters 过了一段时间,完成之后, 我如何实现自动化,直接访问这些变量中的任何一个来设置/获取,而不必逐一检查这100个变量。有时,在一个大项目中,几乎所有地方都可以访问一个变量,所以手工操作有点困难 我使用Eclipse IDE,C++项目 如果你的项目很大,你将私有成员控件改造成它,你可能会发现有一个替代的路线:不执行GATTER。只需实现setter。为每个底层私有成员变量定义一个const public

我已将对类变量的访问权限从公共更改为私有

然后创建了100个变量的getter和setters

过了一段时间,完成之后,

我如何实现自动化,直接访问这些变量中的任何一个来设置/获取,而不必逐一检查这100个变量。有时,在一个大项目中,几乎所有地方都可以访问一个变量,所以手工操作有点困难


我使用Eclipse IDE,C++项目

如果你的项目很大,你将私有成员控件改造成它,你可能会发现有一个替代的路线:不执行GATTER。只需实现setter。为每个底层私有成员变量定义一个const public引用,该变量作为它的getter。读取此数据的任何代码都可以保持不变;您只需更新设置这些变量的代码,这可能会大大减少更新的痛苦。如果按此方法进行,则必须在构造函数中初始化这些公共引用,如下所示:

class fred {
public:
    fred() : stone(_stone) {} // every constructor must initialize all public references like this
    void set_stone(int s) { _stone = s; }
    int get_stone() { return _stone; } // Instead of this (or, in ADDITION to this), do this....
    const int& stone; // const public reference to internal private data member
private:
    int _stone;
}

您可以永久使用该解决方案,或者直到有一天您完成所有getter的更新。就个人而言,对于内部数据的数据类型非常明显且不会改变的类,我更喜欢这种解决方案,因为用它编写的代码更容易阅读。我希望C++有一个操作符CaseMeCudiStter特性,它允许你编写一个SETER方法,看起来就像你只是访问一个数据成员而不是调用一个方法。这将产生比setter方法更整洁的代码。

我不认为您可以轻松地更改保护并查找和替换它们。对项目的现有部分执行此操作并非易事。只是想一想:如果您有100个数据成员,也许您应该重构容器类并将其拆分为更小的类。因此,您不允许公开访问数据成员的原因。。。改变一个公共接口是一件很麻烦的事。用函数而不是直接变量访问来抽取类的内部不会使代码OOP。。除非你真的做了一些简单赋值/返回之外的事情。@g-makulik 100类听上去同样错误……我喜欢这个想法,但我希望IDE自动化,类似于生成getter和setter。