关于C++一些特性的探究_C 语言

在学习c++的过程中,也曾经学习java,就发现java有类的嵌套,而看的c++的书,从来没有哪个讲c++的类可以嵌套,于是就试了一下,看是否c++可以嵌套类(编译环境vc++6.0)

于是有了下面的代码:

#include <iostream>
using namespace std;
class A
{
public:
  A(){
    cout<<"this a"<<endl;
  }
  ~A(){cout<<"a dead"<<endl;}
  class B
  {
  public:
    B(){cout<<"this b"<<endl;}
    ~B(){cout<<"b dead"<<endl;}
  };
  B b;
};
class c:public A
{
};
int main(int argc, char * argv[])
{
  A a;
  return 0;
}

结果是正确的,那么看来c++是支持嵌套类的,至少vc++6.0是支持的

那么B类是否可以使用呢?于是有了下面的代码:

#include <iostream>
using namespace std;
class A
{
public:
  A(){
    cout<<"this a"<<endl;
  }
  void getA(){cout<<"i am getA()"<<endl;}
  ~A(){cout<<"a dead"<<endl;}
  class B
  {
  public:
    B(){cout<<"this b"<<endl;}
    ~B(){cout<<"b dead"<<endl;}
    void getB(){cout<<"i am getB()"<<endl;}

  };
  B b;
};
int main(int argc, char * argv[])
{
  A a;
  a.b.getB();
    A::B b;
    b.getB();
  return 0;
}

结果能成功调用getB()方法,着可以间接证明这个类正的被正确识别了,好了,那我们看是否B能继承别的类呢?于是有了下面的代码:

#include <iostream>
using namespace std;
class A
{
public:
  A(){
    cout<<"this a"<<endl;
  }
  void getA(){cout<<"i am getA()"<<endl;}
  ~A(){cout<<"a dead"<<endl;}
  class B:public A
  {
  public:
    B(){cout<<"this b"<<endl;}
    ~B(){cout<<"b dead"<<endl;}
    void getB(){cout<<"i am getB()"<<endl;}

  };
  B b;
};

int main(int argc, char * argv[])
{
  A a;
  a.b.getB();
  A::B b;
    b.getD();
  return 0;
}

好了结果说A未定义,好吧,那我们从定义一个类,如下:

#include <iostream>
using namespace std;
class D
{
public:
  void getD()
  {
    cout<<"i am getD()"<<endl;
  }
};
class A
{
public:
  A(){
    cout<<"this a"<<endl;
  }
  void getA(){cout<<"i am getA()"<<endl;}
  ~A(){cout<<"a dead"<<endl;}
  class B:public D
  {
  public:
    B(){cout<<"this b"<<endl;}
    ~B(){cout<<"b dead"<<endl;}
    void getB(){cout<<"i am getB()"<<endl;}

  };
  B b;
};
int main(int argc, char * argv[])
{
  A a;
  a.b.getB();
  a.getA();
  a.b.getD();
  A::B b;
  b.getB();
  b.getD();
  return 0;
}

结果也是正确的,看来类B是可以继承其他类的,也有那些继承关系。

结论:

我们分析到c++是可以进行类嵌套的,并且可以像正常类一样操作它,除了不能继承嵌套它的类,目前还没发现有其它特性,有兴趣的可以验证一下匿名类是否可以在c++被允许。

以上这篇关于C++一些特性的探究就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c++
特性
c 语言特性、c语言的特性、探究骨的成分和特性、微信的传播特性探究、为探究物质的某种特性,以便于您获取更多的相关知识。

时间: 2024-08-02 02:54:40

关于C++一些特性的探究_C 语言的相关文章

C语言kmp算法简单示例和实现原理探究_C 语言

以前看过kmp算法,当时接触后总感觉好深奥啊,抱着数据结构的数啃了一中午,最终才大致看懂,后来提起kmp也只剩下"奥,它是做模式匹配的"这点干货.最近有空,翻出来算法导论看看,原来就是这么简单(下不说程序实现,思想很简单). 模式匹配的经典应用:从一个字符串中找到模式字串的位置.如"abcdef"中"cde"出现在原串第三个位置.从基础看起 朴素的模式匹配算法 A:abcdefg  B:cde 首先B从A的第一位开始比较,B++==A++,如果全

C++开发:为什么多线程读写shared_ptr要加锁的详细介绍_C 语言

我在<Linux 多线程服务端编程:使用 muduo C++ 网络库>第 1.9 节"再论 shared_ptr 的线程安全"中写道: (shared_ptr)的引用计数本身是安全且无锁的,但对象的读写则不是,因为 shared_ptr 有两个数据成员,读写操作不能原子化.根据文档(http://www.boost.org/doc/libs/release/libs/smart_ptr/shared_ptr.htm#ThreadSafety), shared_ptr 的线程

c++ 虚函数与纯虚函数的区别(深入分析)_C 语言

在面向对象的C++语言中,虚函数(virtual function)是一个非常重要的概念.因为它充分体现 了面向对象思想中的继承和多态性这两大特性,在C++语言里应用极广.比如在微软的MFC类库中,你会发现很多函数都有virtual关键字,也就是说, 它们都是虚函数.难怪有人甚至称虚函数是C++语言的精髓. 那么,什么是虚函数呢,我们先来看看微软的解释: 虚函数是指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承类的版本. 这个定

解析C语言与C++的编译模型_C 语言

首先简要介绍一下C的编译模型:限于当时的硬件条件,C编译器不能够在内存里一次性地装载所有程序代码,而需要将代码分为多个源文件,并且分别编译.并且由于内存限制,编译器本身也不能太大,因此需要分为多个可执行文件,进行分阶段的编译.在早期一共包括7个可执行文件:cc(调用其它可执行文件),cpp(预处理器),c0(生成中间文件),c1(生成汇编文件),c2(优化,可选),as(汇编器,生成目标文件),ld(链接器).1. 隐式函数声明为了在减少内存使用的情况下实现分离编译,C语言还支持"隐式函数声明&

排列和组合算法的实现方法_C语言经典案例_C 语言

排列和组合算法是考查递归的常见算法,这两种算法能用递归简洁地实现. 本人在经过多次摸索和思考之后,总结如下,以供参考. 程序代码如下: #include <stdio.h> #include <stdlib.h> char array[] = "abcd"; #define N 4 #define M 3 int queue[N] = {0}; int top = 0; int flag[N] = {0}; void perm(int s, int n) { i

C++11新特性之auto的使用_C 语言

前言 C++是一种强类型语言,声明变量时必须明确指出其类型.但是,在实践中,优势我们很难推断出某个表达式的值的类型,尤其是随着模板类型的出现,要想弄明白某些复杂表达式的返回类型就变得更加困难.为了解决这个问题,C++11中引入的auto主要有两种用途:自动类型推断和返回值占位.auto在C++98中的标识临时变量的语义,由于使用极少且多余,在C++11中已被删除.前后两个标准的auto,完全是两个概念. 一.自动类型推断 auto自动类型推断,用于从初始化表达式中推断出变量的数据类型.通过aut

C++11的新特性简单汇总介绍 (二)_C 语言

1. 范围for语句 C++11 引入了一种更为简单的for语句,这种for语句可以很方便的遍历容器或其他序列的所有元素 vector<int> vec = {1,2,3,4,5,6}; for(int x: vec) { cout<<x<<endl; } 2. 尾置返回类型 要想引入尾置类型,我们还得从复杂的类型声明说起.如果我们需要定义一个含有10个int元素的数组,一般是这样的: int arr[10] = {0}; 如果要定义指向这个数组的指针呢: 复制代码 代

C++11的新特性简单汇总介绍 (一)_C 语言

什么是C++11 C++11是曾经被叫做C++0x,是对目前C++语言的扩展和修正,C++11不仅包含核心语言的新机能,而且扩展了C++的标准程序库(STL),并入了大部分的C++ Technical Report 1(TR1)程序库(数学的特殊函数除外). C++11包括大量的新特性:包括lambda表达式,类型推导关键字auto.decltype,和模板的大量改进. 1. 概述 最近在看C++ Primer5 刚好看到一半,总结一下C++11里面确实加了很多新东西,如果没有任何了解,别说自己

C++第11版本中的一些强大的新特性小结_C 语言

Auto Type Deduction 自动类型推导 auto 关键字让用户得以使用 C++ 内置的类型推导特性. std::string something = somethingthatreturnsastring.getString(); auto something = somethingthatreturnsastring.getString(); Auto 关键字会对上述自变量(something)进行自动推导,得出其应该是 string 类型的结论,并在 auto 出现的地方用正确