C++中的私有类属性

Private class attributes in C++

本文关键字:属性 C++      更新时间:2023-10-16

我目前正在复习学校的一门课程,遇到了这个问题。

以下代码的问题是,我的Box类的属性xy是私有的,因此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();
}