我们怎样才能有朋友宣言和朋友精心制作的班级名称;"例如在c ++中?

时间:2016-04-05 10:42:54

标签: c++ declaration keyword friend

我对详细的班级名称感到困惑。如果被描述为示例,我将非常感激。 语法:friend elaborated-class-name;

3 个答案:

答案 0 :(得分:2)

详细说明的班级名称仅表示class(或struct)关键字+班级的实际名称。

像这样使用:

friend class Klass;

答案 1 :(得分:2)

从n4140:

[class.friend] / 3:

  

未声明功能的朋友声明应具有以下形式之一:
  朋友精心设计的说明者;
  朋友简单类型说明符;
  朋友typename-specifier;

然后你有一个例子:

class C;
typedef C Ct;
class X1 {
  friend C; // OK: class C is a friend
};
class X2 {
  friend Ct; // OK: class C is a friend
  friend D; // error: no type-name D in scope
  friend class D; // OK: elaborated-type-specifier declares new class
};

所以:friend class D;是详细类型说明符的一个例子。虽然friend D;不是,并且被称为简单类型说明符 - 这是自C ++ 11以来的新内容。

答案 2 :(得分:0)

这是一个示范程序

#include <iostream>

namespace usr
{
    int B = 20;

    class A
    {
    public:
        A( int x = 0 ) : x( x ) {}
        friend class B;  // using of elaborated type specifier
    private:
        int x;
    };

    class B
    {
    public:        
        std::ostream & out( const A &a, std::ostream &os = std::cout ) const
        {
            return os << a.x;
        }
    };
}

int main()
{
    class usr::B b;  // using of elaborated type specifier
    b.out( usr::A( 10 ) ) << ' ' << usr::B << std::endl;    
}    

它的输出是

10 20