C++:如何访问内部类的方法
C++: How can I access a method of an inner class?
我正在学习classes
,并考虑创建嵌套类。所以我有下面的类声明。
class myClass {
public:
void method1() {
cout << "This is method 1" << endl;
}
class myClass2 {
void method2() {
cout << "This is method 2" << endl;
}
};
};
正如你所看到的,myClass
有一个方法method2
。下面的代码运行得很好,给了我想要的输出。
myClass obj;
obj.method1();
但当我尝试这个:
obj.method2();
我收到错误消息method2 is not a member of myClass
。
问题:
- 为什么我不能访问方法"method2
from objects of class
myClass" - 有办法访问
method2
吗
对于问题2,我想在myClass
中创建一个myClass2
类的对象,然后在myClass
中创建另一个函数来访问method2
函数。
我想知道是否还有其他出路,因为我的路似乎有点让人头疼。
1)因为Class2()
不是myClass
的成员。
2) 你需要实例化一个myClass::myClass2
对象并调用它的成员。myClass2::Class2()
是一个成员函数,所以它需要一个对象来操作。例如
myClass::myClass2 obj;
obj.Class2();
请注意,这需要将myClass2::Class2()
设置为公共成员。它在您的代码中是私有的。
将class2
放入class1
中的效果比您想象的要差。它只不过是把它放在class1
的范围内。
所以,想象一下同样的东西,但不是嵌套的:
class myClass
{
public:
void Class1()
{
cout<<"This is Class 1"<<endl;
}
};
class myClass2
{
public:
void Class2()
{
cout<<"This is Class 2"<<endl;
}
};
...
// and this should look normal to you:
myClass obj;
obj.Class1();
myClass2 obj2;
obj2.Class2();
现在,像您所做的那样,将myClass2
放在myClass
作用域中,看看最后几行是如何变化的。
class myClass
{
public:
void Class1()
{
cout<<"This is Class 1"<<endl;
}
class myClass2
{
public:
void Class2()
{
cout<<"This is Class 2"<<endl;
}
};
};
...
myClass obj;
obj.Class1();
myClass::myClass2 obj2;// this is the only thing that changes. You put myClass2 in a different scope.
obj2.Class2();
因此,直接回答您的问题:
1) 为什么我不能使用myClass obj.访问函数Class2
因为CCD_ 21不是CCD_ 22的成员。它是myClass2
的一个成员,您需要像使用myClass
一样实例化它。
2) 是否有访问Class2函数的方法。
是的,通过实例化一个myClass2
,就像在我的示例的末尾:myClass::myClass2 obj2; obj2.Class2();
。
相关文章:
- 在C++中使用内联方法时出现未定义的符号错误
- 是否有内置方法可以强制转换为不同的基础类型,但保留常量限定符?
- 在设计 SDK 时,我是否应该在 C++ 头文件中完全隐藏内部类?
- 如何声明由多个线程调用的 C++ DLL 的内部类,而无需导出类
- 从内部类继承
- 如何将枚举类转发声明为模板化类的内部类?
- 从内部类中的方法从包含类调用方法
- 从模板化父类中的派生内部类访问受保护的成员变量
- VS2017 版本 15.8.3 成功编译内联方法,而不返回所需值
- C++模板类的内部类访问
- 使用类模板的内部类模板专用化模板
- 如何使用包含内部类的类实例有效地从内部类访问成员?
- 具有相同名称的方法和内部类(错误:.. 与前面的声明冲突)
- 内联方法:类定义内部与外部类定义
- C++:如何访问内部类的方法
- 派生类是否可以访问作为内部类的好友的父类的受保护内部类的私有方法
- 模板方法编译错误,从内部类返回实例
- 目标C错误:C风格的方法内部类实现
- 在c++中使用导入的dll内部类方法
- 模板类外部的内部类方法定义