在学习c++的过程中,也曾经学习java,就发现java有类的嵌套,而看的c++的书,从来没有哪个讲c++的类可以嵌套,于是就试了一下,看是否c++可以嵌套类(编译环境vc++6.0)
于是有了下面的代码:
1 #include <iostream> 2 using namespace std; 3 class A 4 { 5 public: 6 A(){ 7 cout<<"this a"<<endl; 8 } 9 ~A(){cout<<"a dead"<<endl;} 10 class B 11 { 12 public: 13 B(){cout<<"this b"<<endl;} 14 ~B(){cout<<"b dead"<<endl;} 15 }; 16 B b; 17 }; 18 class c:public A 19 { 20 }; 21 int main(int argc, char * argv[]) 22 { 23 A a; 24 return 0; 25 }
结果是正确的,那么看来c++是支持嵌套类的,至少vc++6.0是支持的
那么B类是否可以使用呢?于是有了下面的代码:
1 #include <iostream> 2 using namespace std; 3 class A 4 { 5 public: 6 A(){ 7 cout<<"this a"<<endl; 8 } 9 void getA(){cout<<"i am getA()"<<endl;} 10 ~A(){cout<<"a dead"<<endl;} 11 class B 12 { 13 public: 14 B(){cout<<"this b"<<endl;} 15 ~B(){cout<<"b dead"<<endl;} 16 void getB(){cout<<"i am getB()"<<endl;} 17 18 }; 19 B b; 20 }; 21 int main(int argc, char * argv[]) 22 { 23 A a; 24 a.b.getB(); 25 A::B b; 26 b.getB(); 27 return 0; 28 }
结果能成功调用getB()方法,着可以间接证明这个类正的被正确识别了,好了,那我们看是否B能继承别的类呢?于是有了下面的代码:
1 #include <iostream> 2 using namespace std; 3 class A 4 { 5 public: 6 A(){ 7 cout<<"this a"<<endl; 8 } 9 void getA(){cout<<"i am getA()"<<endl;} 10 ~A(){cout<<"a dead"<<endl;} 11 class B:public A 12 { 13 public: 14 B(){cout<<"this b"<<endl;} 15 ~B(){cout<<"b dead"<<endl;} 16 void getB(){cout<<"i am getB()"<<endl;} 17 18 }; 19 B b; 20 }; 21 22 int main(int argc, char * argv[]) 23 { 24 A a; 25 a.b.getB(); 26 A::B b; 27 b.getD(); 28 return 0; 29 }
好了结果说A未定义,好吧,那我们从定义一个类,如下:
1 #include <iostream> 2 using namespace std; 3 class D 4 { 5 public: 6 void getD() 7 { 8 cout<<"i am getD()"<<endl; 9 } 10 }; 11 class A 12 { 13 public: 14 A(){ 15 cout<<"this a"<<endl; 16 } 17 void getA(){cout<<"i am getA()"<<endl;} 18 ~A(){cout<<"a dead"<<endl;} 19 class B:public D 20 { 21 public: 22 B(){cout<<"this b"<<endl;} 23 ~B(){cout<<"b dead"<<endl;} 24 void getB(){cout<<"i am getB()"<<endl;} 25 26 }; 27 B b; 28 }; 29 int main(int argc, char * argv[]) 30 { 31 A a; 32 a.b.getB(); 33 a.getA(); 34 a.b.getD(); 35 A::B b; 36 b.getB(); 37 b.getD(); 38 return 0; 39 }
结果也是正确的,看来类B是可以继承其他类的,也有那些继承关系。
结论:
我们分析到c++是可以进行类嵌套的,并且可以像正常类一样操作它,除了不能继承嵌套它的类,目前还没发现有其它特性,有兴趣的可以验证一下匿名类是否可以在c++被允许。
时间: 2024-10-22 00:21:30