C++:如何访问内部 class 的方法?
C++: How can I access a method of an inner class?
我正在经历 classes
并想到做嵌套 classes.So 我有下面的 class 声明。
class myClass {
public:
void method1() {
cout << "This is method 1" << endl;
}
class myClass2 {
void method2() {
cout << "This is method 2" << endl;
}
};
};
如您所见,myClass
在下面的 it.The 代码中有一个方法 method2
工作得很好并且给了我想要的输出。
myClass obj;
obj.method1();
但是当我尝试这个时:
obj.method2();
我收到错误消息 method2 is not a member of myClass
。
问题:
- 为什么我无法访问方法“method2
from objects of class
myClass”?
- 有没有办法访问
method2
?
对于问题2,我想在myClass
中创建一个classmyClass2
的对象,然后在myClass
中创建另一个函数来访问method2
函数。
我想知道有没有别的出路,因为我的方式好像有点pain staking。
1) 因为Class2()
不是myClass
的成员。
2) 你需要实例化一个myClass::myClass2
对象并调用它的成员。 myClass2::Class2()
是一个成员函数,所以它需要一个对象来作用。例如
myClass::myClass2 obj;
obj.Class2();
请注意,这需要您使 myClass2::Class2()
成为 public 成员。它在您的代码中是私有的。
将 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) Why cant I access the function Class2 using the myClass obj.
因为Class2
不是myClass
的成员。它是 myClass2
的成员,您需要像 myClass
.
一样对其进行实例化
2) Is there a way to access Class2 function.
是的,通过实例化一个 myClass2
,就像我的例子的结尾:myClass::myClass2 obj2; obj2.Class2();
.
我正在经历 classes
并想到做嵌套 classes.So 我有下面的 class 声明。
class myClass {
public:
void method1() {
cout << "This is method 1" << endl;
}
class myClass2 {
void method2() {
cout << "This is method 2" << endl;
}
};
};
如您所见,myClass
在下面的 it.The 代码中有一个方法 method2
工作得很好并且给了我想要的输出。
myClass obj;
obj.method1();
但是当我尝试这个时:
obj.method2();
我收到错误消息 method2 is not a member of myClass
。
问题:
- 为什么我无法访问方法“method2
from objects of class
myClass”? - 有没有办法访问
method2
?
对于问题2,我想在myClass
中创建一个classmyClass2
的对象,然后在myClass
中创建另一个函数来访问method2
函数。
我想知道有没有别的出路,因为我的方式好像有点pain staking。
1) 因为Class2()
不是myClass
的成员。
2) 你需要实例化一个myClass::myClass2
对象并调用它的成员。 myClass2::Class2()
是一个成员函数,所以它需要一个对象来作用。例如
myClass::myClass2 obj;
obj.Class2();
请注意,这需要您使 myClass2::Class2()
成为 public 成员。它在您的代码中是私有的。
将 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) Why cant I access the function Class2 using the myClass obj.
因为Class2
不是myClass
的成员。它是 myClass2
的成员,您需要像 myClass
.
2) Is there a way to access Class2 function.
是的,通过实例化一个 myClass2
,就像我的例子的结尾:myClass::myClass2 obj2; obj2.Class2();
.