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