C++中的私有类属性
Private class attributes in C++
我目前正在复习学校的一门课程,遇到了这个问题。
以下代码的问题是,我的Box
类的属性x
和y
是私有的,因此Foo
方法无法访问它们。尽管如此,这门课并没有告诉我为什么那么好,所以我决定问斯塔克弗洛的好人。
应该在下面的//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>b2n";
}
return cin.get();
}
这里有很多选项。如果只允许添加一行,则可以将foo
作为朋友函数:
friend bool foo(Box l, Box r);
Getter可能是一个更好的选择,您也可以将foo
作为一个静态函数,但这需要三行代码(在定义中的foo
前面和调用它的main中添加Box::
)。
你想做什么?是否希望x和y可以修改?如果没有,请添加getX和getY方法,它们只是从类中返回值。如果你想让它们可以自由修改,那就放弃OO的把戏,只公开它们,因为在这种情况下没有理由试图保护它们。
使用一些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>b2n";
}
return cin.get();
}
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- C++概念:如何使用'concept'检查模板化结构的属性?
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 通过指向指针数组的指针访问子类的属性
- MSVC是否支持C++11样式的属性而不是__declspec
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 类的C++属性似乎已重新初始化
- Qt Quick-如何仅从c++代码与qml属性交互
- 用概念检查属性的类型
- C++如何将同一类的实例作为属性
- 按多个属性排序
- 主函数参数的属性
- "perf_event_attr"结构的"read_format"属性的选项到底是什么?
- C++删除未使用的类属性会导致 std::logic_error
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 使用内存地址访问结构的属性值
- C++调用具有 *this 属性的单个帮助程序函数
- C++ 在堆栈中包含多态属性的类对象存储
- C++ 命名参数习惯用语 - 未设置字符串属性
- 使用 CTRP 时,是否访问访问父构造函数 UB 中的子属性?