Re: Question

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 10/07/2014 08:57 AM, Graziano Servizi wrote:
So, if I have well understood I could write such a short code:

# include <iostream>

class P
  {
   friend void friend_inline()
    {std :: cout << P :: Name << ' ' << p << '\n';}
   You will need to qualify "p" as well:
   {std :: cout << P::Name << ' ' << P::p << '\n';}
   static constexpr int Name = 20;
   static constexpr double p = 12.5;

   };

int main()
  {
   P p;
   // how can I call friend_inline ?
     friend_inline();
}
It's just a function.

It's probably more clear if you split the definition of the function, the declaration of it being a friend, and the implementation:

// Declaration: there exists a function named "friend_inline"...
void friend_inline();

// Class declaration.
class P
 {
// Class P allows a non-class function "friend_inline" to access its private variables...
  friend void friend_inline();
  static constexpr int Name = 20;
  static constexpr double p = 12.5;

  };

// Definition of the function "friend_inline"
void friend_inline()
{
  std::cout << P::Name << ' ' << P::p << std::endl;
}

Each of these things - declaration, friending, and definition - are separate things. They can be combined into one statement (as in your example) for brevity, but they still are 3 different things.

Also: be VERY CAREFUL about using friend - it's almost always a bad idea. You are almost always better off making one or more public member functions, and calling them, than you are exposing every last private member to a non-member function.

somewhat OT: I wouldn't put spaces between the class name, the colon, and the variable name in your code; they are all one thing - the name of the object being accessed. Also, use "std::endl" to end a sequence of insertions to a stream, not just '\n' - std::endl has more semantic meaning to the system, it really means "I am done with this line, do whatever you need to do, such as flushing it to the file", vs. "\n" which just means "insert a newline character".






[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux