加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 在全局范围内访问私有变量

发布时间:2020-12-16 10:27:43 所属栏目:百科 来源:网络整理
导读:在下面的代码中,全局范围中的foo函数尝试访问Box的私有变量,这些变量当然不起作用.我必须让foo函数在学校作业的地方显示代码中使用一行代码. #include iostreamusing namespace std;class Box { int x,y; public: Box(int xi,int yi) {x=xi;y=yi;} // One li
在下面的代码中,全局范围中的foo函数尝试访问Box的私有变量,这些变量当然不起作用.我必须让foo函数在学校作业的地方显示代码中使用一行代码.

#include <iostream>

using namespace std;
class Box {
      int x,y;

      public:
             Box(int xi,int yi) {x=xi;y=yi;}
             // One line of code to make foo(Box,Box) work
};

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声明为Box中的友元函数

#include<iostream>

   class Box {
     int x,y;

     public:
         Box(int xi,int yi) :x(xi),y(yi){}// Always use initializer list for initializing data members,i.e. prefer initialization over assignment

         friend bool foo(Box,Box);// friend functions can access private members
   };

   bool foo(Box l,Box r)       // friend keyword not to be written while defining the function
   {return (l.x*l.y)>(r.x*r.y);}

   int main(int argc,char* argv[]) {
      Box b1(3,2);

      if (foo(b1,b2)) std::cout << "b1>b2n";

     return std::cin.get();
   }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读