C++ 嵌套类使用

原创 2011年01月20日 10:58:00

C++嵌套类

1   嵌套类的名字只在外围类可见。

2   类的私有成员只有类的成员和友元可以访问,因此外围类不可以访问嵌套类的私有成员。嵌套类可以访问外围类的成员(通过对象、指针或者引用)。

3   一个好的嵌套类设计:嵌套类应该设成私有。嵌套类的成员和方法可以设为 public

4   嵌套类可以直接访问外围类的静态成员、类型名( typedef )、枚举值。

// qiantaolei.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;
class MotherClass
{
public:
    MotherClass(int b)
    {
        a=b;
        cout<<"MotherClass constructed "<<endl;
    }
   int  fun();
 
   int getA();
public:
   
    class mothersClass
    {
    public:
        mothersClass(int b)
        {
            mothersT =b;
            cout<<"MotherClass::mothersClass constructed "<<endl;
        }
        int  funT();
        int getmothersT();
        //int getMotherClassAA()
        //{
        //    return MotherClass::aa;
        //}
        //int getMotherClassBB()
        //{
        //    MotherClass::bb=1234;
        //    return MotherClass::bb;

        //}
    protected:
    private:
        int mothersT;
    };
protected:

public:

    /*static  int aa;*/
   /* int bb;*/


private:
    int a;
};//

//static int MotherClass::aa =100;

int MotherClass::fun()
{
   mothersClass mothersClassT(1);
   return mothersClassT.getmothersT();

}
int MotherClass::getA()
{
    //a= mothersClass::getmothersT();//error
  return a;
}
int MotherClass::mothersClass::getmothersT()
{
    return mothersT;

}
int MotherClass::mothersClass::funT()
{
    MotherClass MotherClassT(2);

    return MotherClassT.getA();
}

int _tmain(int argc, _TCHAR* argv[])
{

    MotherClass myClass(3);
    MotherClass::mothersClass myClassT(4);
    MotherClass::mothersClass myClassTT(5);
    int a= myClass.getA();
    cout<<"MotherClass::getA()="<<a<<endl;
    cout<<"MotherClass::fun()="<<myClass.fun()<<endl;
    a= myClassT.getmothersT();
    cout<<"MotherClass::mothersClass::getmothersT()="<<a<<endl;
    a=myClassT.funT();
    cout<<"MotherClass::mothersClass::funT()="<<a<<endl;
  
    //cout<<"MotherClass::mothersClass.getMotherClassAA()="<<MotherClass::mothersClass.getMotherClassAA()<<endl;
    cin.get();

 return 0;
}

 

下面内容是从网上贴来的。

下面内容是从网上贴来的。

 

C++嵌套类

 嵌套类的访问问题:

记得白凤煮的C++中有一句这样的话:C++嵌套类只是语法上的嵌套。然而在实践过程中,却并非如此。

Ex:

 class A

  {

 public: 

     static int a;

     class A1

      {

         void output()

          {

           cout<<a<<endl; //instead of A::a;

         }

     };

  

 };

 int A::a;

可见,类 A1 嵌入A后访问A的静态变量不写外围域没有任何问题,从编译的角度看,此时位于A::的作用域内,在符号表中是可以找到a(注意,a必须为static)。这一点,与分开写的两个类明显不同

 

还有一个特殊之处,见如下代码:

 

 Ex:

 

 class A

  {

 private:

     int a;

     class A1

      {

         void output(A aObject)

          {

           cout<<aObject.a<<endl; //instead of A::a;

         }

     };

  

 };

这段代码在VC中不能编译通过,但在DEVC++是可以的,也就是不同的编译对于嵌套类是否能访问外围类的私有成员的定义是不一致的。

嵌套类的不同作用域同名问题:

 class A

  {

 public: 

     static int a;

     class A1

      {

         static int a;

         int    void output()

          {

           cout<<a<<endl; //instead of A::a;

         }

     };

  

 };

 int A::a=3;

 int A::A1::a=4;

输出内部的a没有问题,如果要访问外部的,使用A::a指明作用域就可以,而且在嵌套类中,可以定义静态的成员。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

STL中的内存分配器原理

题记:内存管理一直是C/C++程序的红灯区。关于内存管理的话题,大致有两类侧重点,一类是内存的正确使用,例如C++中new和delete应该成对出现,用RAII技巧管理内存资源,auto_ptr等方面...

C++嵌套类的使用方法

在一个类的内部定义另一个类,我们称之为嵌套类(nested class),或者嵌套类型。之所以引入这样一个嵌套类,往往是因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现,且同时...

C++ 中的嵌套类和局部类

C++ 中的嵌套类和局部类   最近趁着春节假期空闲,找了本C++ Primer 学了几章,发现C++ 中的许多特性自己都不知道。其中嵌套类和局部类感觉还是蛮有用的,简单的写写他们的用法。 嵌套...

C/C++中作用域详解

转自:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777433.html  作用域规则告诉我们一个变量的有效范围,它在哪儿...

C++ 嵌套类使用

C++嵌套类 1、   嵌套类的名字只在外围类可见。 2、   类的私有成员只有类的成员和友元可以访问,因此外围类不可以访问嵌套类的私有成员。嵌套类可以访问外围类的成员(通过对象、指针或者...

C++嵌套类与局部类

1.1嵌套类的定义在一个类体中定义的类叫作嵌套类。拥有嵌套类的类叫外围类。1.2嵌套类的作用定义嵌套类的初衷是建立仅供某各类目的在于隐藏类名,减少全局的标识符,从而限制用户能否使用该类建立对象。这样可...

C++中函数重载、隐藏、覆盖和重写的区别

函数重载 1.1函数重载的定义C++规定在同一作用域中,同名函数的形式参数(指参数的个数、类型或者顺序)不同时,构成函数重载(Function Overload)。 1.2函数重载的用法比如,要从两个...

C++嵌套类的使用及对外部类的访问权限

C++中的嵌套类与Java中的静态内部类类似,而完全不同于非静态内部类(成员内部类)。 http://www.cnblogs.com/qzhforthelife/archive/2013/0...
  • wwww4
  • wwww4
  • 2015-07-03 10:29
  • 2166

C++嵌套类的继承及纯虚函数实现整理

嵌套类,纯虚函数,类继承,函数实现,运行时多态,感谢网友帮忙,虽然很简单,希望能帮到初学者及不熟悉语法的人!从简单开始~~ 该代码编译通过 #include "stdio.h"   class A  ...

深入理解java嵌套类和内部类

一、什么是嵌套类及内部类   可以在一个类的内部定义另一个类,这种类称为嵌套类(nested classes),它有两种类型:静态嵌套类和非静态嵌套类。静态嵌套类使用很少,最重要的是非静态嵌套类...
  • hguisu
  • hguisu
  • 2012-06-08 09:42
  • 19506
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)