我试图理解嵌套类中的友谊概念,但我没有正确理解这个概念。我已经编写了一个示例程序来理解它,但该程序不起作用
#include<iostream>
using namespace std;
class outerClass
{
private:
int a;
public:
class innerClass;
bool print(innerClass);
};
class innerClass
{
friend class outerClass;
private:
int b;
public:
innerClass() =default;
};
bool outerClass::print(outerClass::innerClass obj)
{
cout<<"Value of b in inner class is:"<<obj.b;
}
int main()
{
outerClass in;
outerClass::innerClass obj;
obj.b=5;
in.print(obj);
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
try.cpp: In member function ‘bool outerClass::print(outerClass::innerClass)’:
try.cpp:26:6: error: ‘obj’ has incomplete type
try.cpp:11:15: error: forward declaration of ‘class outerClass::innerClass’
try.cpp: In function ‘int main()’:
try.cpp:34:28: error: aggregate ‘outerClass::innerClass obj’ has incomplete type and cannot be defined
Run Code Online (Sandbox Code Playgroud)
当我阅读互联网上的文章时,我了解到以下几点,如果它们正确与否,请评论它们:
请帮助指出代码中的错误,以及我理解的要点是否正确。
行class innerClass;内outerClass是一个向前声明的class,你永远无法定义。
因此outerClass::innerClass是一个不完整的类型。
innerClass以开头的单独定义
class innerClass
{
Run Code Online (Sandbox Code Playgroud)
是一个完全不同class的向前声明的类。
您friend class outerClass;在定义的innerClass.
如果您想innerClass在 之外定义outerClass,请按以下步骤操作:
class outerClass
{
class innerClass; // forward declaration
};
class outerClass::innerClass // definition
{
};
Run Code Online (Sandbox Code Playgroud)
其余的都还好,除了obj.b=5。类outerClass可以访问innerClass::b,函数main()则不允许。
innerClass默认可以访问outerClass的所有成员。
正确的。来自标准[class.access.nest]:
嵌套类是一个成员,因此具有与任何其他成员相同的访问权限。
为了让outerClass访问innnerClass的私有成员,我们需要将outerClass作为innerClass的友元类。
正确的。来自标准[class.access.nest]:
封闭类的成员对嵌套类的成员没有特殊访问权限;
| 归档时间: |
|
| 查看次数: |
2048 次 |
| 最近记录: |