C++ 中的私有 class 属性
Private class attributes in C++
我目前正在复习学校的一门课程,我 运行 反对这个问题。
以下代码的问题是我的 Box
class 的属性 x
和 y
是私有的,因此 Foo
方法。课程仍然不如告诉我 为什么 所以我决定问问 Whosebug 的好人。
下面//Insert line of code here
上应该添加什么代码才能使我现在的程序运行?
#include <iostream>
using namespace std;
class Box {
int x,y;
public:
Box(int xi, int yi)
{
x=xi;
y=yi;
}
//Insert line of code here
}
bool foo(Box l, Box r){
return (l.x*l.y)>(r.x*r.y);
}
int main(int argc, char* argv[])
{
Box b1(3,4), b2(1,2);
if(foo(b1,b2)) {
cout <<"b1>b2\n";
}
return cin.get();
}
你想做什么?您希望 x 和 y 可以修改吗?如果不是,请添加 getX 和 getY 方法,它们只是 return class 中的值。如果您希望它们可以自由修改,请放弃面向对象的游戏,直接制作它们 public,因为在这种情况下没有理由试图保护它们。
用一些get方法来做:
#include <iostream>
using namespace std;
class Box {
int x,y;
public:
Box(int xi, int yi)
{
x=xi;
y=yi;
}
//Insert line of code here
int Box::getx(){return x;}
int Box::gety(){return y;}
}
bool foo(Box l, Box r){
return (l.get()*l.gety())>(r.getx()*r.gety());
}
int main(int argc, char* argv[])
{
Box b1(3,4), b2(1,2);
if(foo(b1,b2)) {
cout <<"b1>b2\n";
}
return cin.get();
}
这里有很多选项。如果只允许添加一行,可以将 foo
设为友元函数:
friend bool foo(Box l, Box r);
Getter 可能是更好的选择,您也可以将 foo
设为静态函数,但这需要三行(在 foo
前面添加 Box::
定义和主要调用它的地方)。
我目前正在复习学校的一门课程,我 运行 反对这个问题。
以下代码的问题是我的 Box
class 的属性 x
和 y
是私有的,因此 Foo
方法。课程仍然不如告诉我 为什么 所以我决定问问 Whosebug 的好人。
下面//Insert line of code here
上应该添加什么代码才能使我现在的程序运行?
#include <iostream>
using namespace std;
class Box {
int x,y;
public:
Box(int xi, int yi)
{
x=xi;
y=yi;
}
//Insert line of code here
}
bool foo(Box l, Box r){
return (l.x*l.y)>(r.x*r.y);
}
int main(int argc, char* argv[])
{
Box b1(3,4), b2(1,2);
if(foo(b1,b2)) {
cout <<"b1>b2\n";
}
return cin.get();
}
你想做什么?您希望 x 和 y 可以修改吗?如果不是,请添加 getX 和 getY 方法,它们只是 return class 中的值。如果您希望它们可以自由修改,请放弃面向对象的游戏,直接制作它们 public,因为在这种情况下没有理由试图保护它们。
用一些get方法来做:
#include <iostream>
using namespace std;
class Box {
int x,y;
public:
Box(int xi, int yi)
{
x=xi;
y=yi;
}
//Insert line of code here
int Box::getx(){return x;}
int Box::gety(){return y;}
}
bool foo(Box l, Box r){
return (l.get()*l.gety())>(r.getx()*r.gety());
}
int main(int argc, char* argv[])
{
Box b1(3,4), b2(1,2);
if(foo(b1,b2)) {
cout <<"b1>b2\n";
}
return cin.get();
}
这里有很多选项。如果只允许添加一行,可以将 foo
设为友元函数:
friend bool foo(Box l, Box r);
Getter 可能是更好的选择,您也可以将 foo
设为静态函数,但这需要三行(在 foo
前面添加 Box::
定义和主要调用它的地方)。