【发布时间】:2011-07-14 14:06:17
【问题描述】:
这是一个关于编程风格的一般问题。假设我有一个对象Line,它有一些方法和私有变量Point point_a_ 和Point point_b_。假设在某些时候我需要改变两点的位置。在以下情况下,您更喜欢哪种编程风格?他们都做同样的事情(或者应该做:我没有编译,但看起来很简单)。
案例 1
Class Line {
public:
Line(Point point_a, Point point_b) : point_a_(point_a), point_b_(point_b) {}
void UpdatePoints(Point point_a, Point point_b) {
point_a_ = point_a; point_b_ = point_b;
}
double Distance();
private:
Point point_a_;
Point point_b_;
};
int main (int argc, char * const argv[]) {
Point point_a(0,0,0);
Point point_b(1,1,1);
Line line(point_a,point_b);
std::cout<<line.Distance()<<"\n";
point_a.x = 1;
line.UpdatePoints(point_a,point_b);
std::cout<<line.Distance()<<"\n";
}
案例 2
Class Line {
public:
Line(Point point_a, Point point_b) : point_a_(point_a), point_b_(point_b) {}
Point& point_a() { return point_a_; }
Point& point_b() { return point_b_; }
double Distance();
private:
Point point_a_;
Point point_b_;
};
int main (int argc, char * const argv[]) {
Point point_a(0,0,0);
Point point_b(1,1,1);
Line line(point_a,point_b);
std::cout<<line.Distance()<<"\n";
line.point_a().x = 1;
std::cout<<line.Distance()<<"\n";
}
案例 3
Class Line {
public:
Line(Point* point_a, Point* point_b) : point_a_(point_a), point_b_(point_b) {}
double Distance();
private:
Point* point_a_;
Point* point_b_;
};
int main (int argc, char * const argv[]) {
Point point_a(0,0,0);
Point point_b(1,1,1);
Line line(&point_a,&point_b);
std::cout<<line.Distance()<<"\n";
point_a.x = 1;
std::cout<<line.Distance()<<"\n";
}
非常感谢任何反馈!
谢谢!
[EDIT] 在我的软件中速度是最重要的!
【问题讨论】:
-
公共成员变量怎么样?
-
谢谢马蒂尼奥。我想避免公共变量。这只是我更复杂的软件的一个简化示例,我总是需要检查输入,所以我更喜欢
set和get方法而不是使用公共变量。 -
好的,请确保您考虑到了这一点。
-
这太抽象了。改变一条线是什么意思?它仍然是同一行还是新行?是画在什么地方吗?连接到任何东西?
-
谢谢@Bo。这只是我在软件中非常复杂的对象的一个简化示例。当我更改它时,我的问题中的实际对象是相同的。假设我可以使用
Person作为示例,而变化的变量是age。
标签: c++ coding-style pass-by-reference pass-by-value