程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++一些特性的探究,特性探究

C++一些特性的探究,特性探究

編輯:C++入門知識

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++被允許。

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved