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

时间: 2024-10-22 00:21:30

C++一些特性的探究的相关文章

NET经典书籍必读

C#与.NET框架,入门 + 进阶 + 精通,外加并发编程实例,10本C#图书,一本都不能少. 1.<Learning hard C#学习笔记> 作者:李志  书号:978-7-115-38292-4  定价:49.00元  开本:16  页数:304 博客园超人气博主.微软MVP.资深.NET软件开发工程师Learning hard告诉你怎么学习C#!一书在手,C#不愁! “本书是作者亲身学习经历的真实总结,很适合C#和.NET初学者.Web开发工程师以及计算机专业的学生阅读.作者从不爱学习

C#精粹,一本都不能少

C#与.NET框架,入门 + 进阶 + 精通,外加并发编程实例,8本C#图书,一本都不能少. 1.<Learning hard C#学习笔记> 作者:李志 书号:978-7-115-38292-4 定价:49.00元 开本:16 页数:304 博客园超人气博主.微软MVP.资深.NET软件开发工程师Learning hard告诉你怎么学习C#!一书在手,C#不愁! "本书是作者亲身学习经历的真实总结,很适合C#和.NET初学者.Web开发工程师以及计算机专业的学生阅读.作者从不爱学习

Linux书籍推荐

自从步入京城后,开始了真正的Linux的运用,当然,看网络的课程片面的,主要还得多看书籍. 网上收集的.准备,一本一本攻克了,加油,做一个自律的人. 目前互联网的主流技术前端是Web+移动,后端是Linux+开源.所以,对于后端来说Linux相关的技术是必须掌握的,这里推荐一些Linux相关的经典著作. 入门 只是为了好玩 Linux之父林纳斯自传 这本书是Linux之父Linus Torvalds的自传,也是Linus唯一一本书.Linus以调侃的语气讲述了自己的成长经历,在他看来,一切都是为

精心整理「服务器Linux C/C++」 成长路程(附思维导图)

前言 我不是名校毕业,更没有大厂的背景,我只是一个毕业不到 2 年的普普通通的程序员,在摸爬滚打的工作这段时间里,深知了有一个「完整的知识体系」是非常重要的.当事人非常后悔没有在大学期间知道这个道理-- 众多大厂招人的需求也是非常注重此方面,毕竟我们不能单单只是一个只会写代码的程序员,更应该成为一个全面的工程师,能够迅速解决工作上的需求及众多问题. 特此,我根据众多大佬的书籍推荐和豆瓣的高分书籍总结了一份较为全面的「服务器Linux C/C++」 成长路程,我自己也是在跟着这份思维导图进一步的学

JavaScript Oriented[探究面向对象的JavaScript高级语言特性]

JavaScript Oriented 探究面向对象的JavaScript高级语言特性 Prologue . JavaScript Introduce 1.  JS Abstract JavaScript是由Netscape公司工程师Brendan Eich研发的脚本语言,经过推广和流行,兼容ECMA-262标准,至今用于描述HTML网页行为.(前端验证,检测,响应,触发,控制等动态行为) Knowledge Tree 2.     About Document 本文涉及到的概念有JavaScr

Java 8新特性探究(八)精简的JRE详解

http://www.importnew.com/14926.html 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 Java小组 工具资源 - 导航条 - 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 Java小组 工具资源 Java 8新特性探究(八)精简的JRE详解 2015/02/05 | 分类: 基础技术 | 0 条评论 | 标签: JRE 分享到:2 原文出处: 成熟的毛毛虫的博客 Oracle公司如期发布了Java 8正式版!没有让广大javaer失望.对于

mysql5.7新特性探究

一.MySql5.7增加的特性 1.MySql服务方面新特性 1) 初始化方式改变 MySql5.7之前版本初始化方式: scripts/mysql_install_db MySql5.7版本初始化方式: [[email protected] mysql_new]# ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql_new/ --datadir=/usr/local/mysql_new/data/ 2015-10-

[转]Java 8新特性探究(lambda)

原文地址:http://my.oschina.net/benhaile/blog/175012 目录[-] 函数式接口 Lambda语法 方法引用 总结 函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的java.lang.Runnable和 java.util.Comparator都是典型的函数式接口.java 8提供 @FunctionalInterface作为注解,这个注解

关于fork()函数特性的一些探究

fork()函数用于产生一个子进程,和当前的进程并行执行.通过判断fork函数的返回值可以区分是父进程还是子进程,如果返回为0,则为子进程. 对于fork函数的执行方式,自己还是存在一些不明,写了一个简单的测试程序测试fork函数的一些性质. 测试程序如下: #include <stdio.h> #include <unistd.h> int main(void) { pid_t pid; int test = 3; FILE* fp; fp = fopen("test.