【问题标题】:need help in using friend functions in c++在 C++ 中使用友元函数需要帮助
【发布时间】:2013-08-28 07:48:10
【问题描述】:

我是 C++ 的新手。我写了一个简单的程序来实现友元函数的使用。代码如下:-

#include<iostream>

using namespace std;

class one
{
   private:
       int age;
   public:
       one()
       {
           age=1;
       }

       void setData(int num)
       {
           age=num;
       }

   friend int returnOne()
   {
       return age;
   }
};

class two
{
   private:
       int roll;
   public:
       two()
       {
          roll=0;
       }

       void setData(int num)
       {
          roll=num;
       }

   friend int returnTwo()
   {
       return roll;
   }
};

int main()
{
    one a;
    two b;
    cout<<a.returnOne()<<endl<<b.returnTwo()<<endl;
}

我在 c++ 中遇到以下错误。

friend.cpp: In function ‘int returnOne()’:
friend.cpp:8:6: error: invalid use of non-static data member ‘one::age’
friend.cpp:20:9: error: from this location
friend.cpp: In function ‘int returnTwo()’:
friend.cpp:27:6: error: invalid use of non-static data member ‘two::roll’
friend.cpp:39:9: error: from this location
friend.cpp: In function ‘int main()’:
friend.cpp:47:10: error: ‘class one’ has no member named ‘returnOne’
friend.cpp:47:31: error: ‘class two’ has no member named ‘returnTwo’

编辑 谢谢。它解决了这个问题。

但是现在它让我想到另一个问题。friend 关键字现在是不是损害了使用private 的目的,因为现在任何类或函数都可以简单地使用friend 函数来访问私有数据成员。如果是,他们我们可以简单地将数据成员声明为public 而不是private。使用private 有什么特别之处?

【问题讨论】:

  • 这个问题的标题立刻让我想起了 Joe Cocker 的一首歌。 :-}
  • @FrerichRaabe 你是说披头士乐队?
  • @juanchopanza:你是对的!我总是想起乔科克的版本。既然你提到了,我记得这首歌是专门为林戈写的,因为他只能选择几个(五个?)不同的音调。不管怎样,我分心了……

标签: c++ class oop friend friend-function


【解决方案1】:

this链接

友元函数是一个不是类成员但 可以访问该类的私有成员和受保护成员。朋友 函数不被视为类成员;他们是正常的外部 被赋予特殊访问权限的功能。朋友不在 类的范围,它们不是使用成员选择来调用的 运算符(. 和 –>),除非它们是另一个类的成员。一种 友元函数由授予访问权限的类声明。这 朋友声明可以放在类声明的任何地方。它 不受访问控制关键字的影响。

【讨论】:

  • :谢谢它解决了问题。但它现在让我想到另一个问题。friend 关键字现在是否损害了使用private 的目的。如果是,我们可以简单地声明数据成员为public 而不是private。使用private 有什么特别之处?
  • @InsaneCoder private 基本上意味着除了类本身及其朋友之外,没有人可以访问它。 public 将允许所有人访问。
  • @InsaneCoder 是和否:否 - 因为该类负责说明是否存在友元函数并且不必提供友元函数。是的 - 如果班级提供了一个每个人都可以使用的朋友功能,并告诉全世界朋友班级是什么以及她拥有什么私人成员,那么班级就会受到损害
  • 值得一提的是,当您必须使用友元函数/类时,通常意味着您的应用程序设计有问题。所以了解它们,但尽量少用它们。 ;)
猜你喜欢
  • 2018-07-17
  • 2011-07-20
  • 2021-11-04
  • 1970-01-01
  • 2014-07-24
  • 2018-04-10
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
相关资源
最近更新 更多