zoukankan      html  css  js  c++  java
  • 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++被允许。

  • 相关阅读:
    揭秘!如何快速提高网站权重-关键词百度指数叠加
    dede编辑文章不更新时间的方法
    PHPCMS V9轻松完成WAP手机网站搭建全教程
    如何建立关键词词库
    3gcms-Flash幻灯片上传后图片模糊解决办法
    手机端wap站网页播放腾讯视频代码
    解决dede编辑器不能保存word文档样式问题
    vi查找替换命令详解 (转载)
    eclipse上安装 windowBuilder方法
    单播、多播(组播)和广播的区别
  • 原文地址:https://www.cnblogs.com/fenqi/p/cpp_study.html
Copyright © 2011-2022 走看看