C++一些特性的探究

在学习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++被允许。

原文地址:https://www.cnblogs.com/fenqi/p/cpp_study.html