C++ 嵌套类使用(三)

如果嵌套类型和其外部类型之间的关系需要成员可访问性语义,需要使用C++嵌套类,嵌套类型不应针对其声明类型以外的类型执行任务,而C++局部类允许类、结构和接口被分成多个小块儿并存储在不同的源文件中,这样的实现很容易开发和维护。

C++局部类:

在一个函数体内定义的类称为局部类。局部类中只能使用它的外围作用域中的对象和函数进行联系,因为外围作用域中的变量与该局部类的对象无关(#add,这半句是什么屁话?)。局部类不能被外部所继承。在定义局部类时需要注意:局部类中不能说明静态成员函数,并且所有成员函数都必须定义在类体内(#add,因为除此之外没有别的地方可以写定义体)。在实践中,局部类是很少使用的。下面是一个局部类的例子。

 int a;

void fun()

{

static int s;

class A

{

public:

void init(int i)  { s = i; }

};

A m;

m.init(10);

}

局部类的另一个用途是用来实现类型转化,如下代码:

class Interface

{

public:

virtual void Fun() = 0;

};

template

Interface* MakeAdapter(const T& obj, const P& arg)

{

int x;

class Local : public Interface

{

public:

Local(const T& obj, const P&
arg)

: obj_(obj),
arg_(arg)  {}

virtual void Fun()

{

x =
100;

obj_.Call(arg_);

}

private:

T obj_;

P arg_;

};

return new Local(obj, arg);

}

C++嵌套类:

在一个类中定义的类称为C++嵌套类,定义嵌套类的类称为外围类。定义嵌套类的目的在于隐藏类名,减少全局的标识符,从而限制用户能否使用该类建立对象。这样可以提高类的抽象能力,并且强调了两个类(外围类和嵌套类)之间的主从关系。下面是一个嵌套类的例子:

 class A

{

public:

class B

{

public:

private:

};

void f();

private:

int a;

};

对嵌套类的若干说明:

1、从作用域的角度看,嵌套类被隐藏在外围类之中,该类名只能在外围类中使用。如果在外围类的作用域内使用该类名时(#add
也就是外围类的外部),需要加名字限定。

2、从访问权限的角度来看,嵌套类名与它的外围类的对象成员名具有相同的访问权限规则。不能访问嵌套类的对象中的私有成员函数,也不能对外围类的私有部分中的嵌套类建立对象。

3、C++嵌套类中的成员函数可以在它的类体外定义。

4、嵌套类中说明的成员不是外围类中对象的成员,反之亦然。嵌套类的成员函数对外围类的成员没有访问权,反之亦然。国此,在分析嵌套类与外围类的成员访问关系时,往往把嵌套类看作非嵌套类来处理。这样,上述的嵌套类可写成如下格式:

class A

{

public:

void f();

private:

int a;

};

class B

{

public:

private:

};

#add 嵌套类可以访问外围类的static数据,即使为private

由引可见,嵌套类仅仅是语法上的嵌入。

5、在C++嵌套类中说明的友元对外围类的成员没有访问权。

6、如果嵌套类比较复杂,可以只在外围类中对嵌套类进行说明,关于嵌套的详细的内容可在外围类体外的文件域中进行定义。

C++ 嵌套类使用(三),布布扣,bubuko.com

时间: 2024-10-05 05:53:42

C++ 嵌套类使用(三)的相关文章

Java 嵌套类和内部类示例<三>

<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;">package nested_inner_class;</span></span> <span style="font-size:18px;"> public class StaticNestedTest3 { pu

嵌套类 局部类

嵌套类 局部类 <c++ primer 3th> C++嵌套类 1.   嵌套类的名字只在外围类可见. 2.   类的私有成员只有类的成员和友元可以访问,因此外围类不可以访问嵌套类的私有成员.嵌套类可以访问外围类的成员(通过对象.指针或者引用). 3.   一个好的嵌套类设计:嵌套类应该设成私有.嵌套类的成员和方法可以设为 public . 4.   嵌套类可以直接访问外围类的静态成员.类型名( typedef ).枚举值. 嵌套类 一个类可以在另一个类中定义,这样的类被称为嵌套类.嵌套类是其

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

一.什么是嵌套类及内部类 可以在一个类的内部定义另一个类,这种类称为嵌套类(nested classes),它有两种类型:静态嵌套类和非静态嵌套类.静态嵌套类使用很少,最重要的是非静态嵌套类,也即是被称作为内部类(inner).嵌套类从JDK1.1开始引入.其中inner类又可分为三种: 其一.在一个类(外部类)中直接定义的内部类: 其二.在一个方法(外部类的方法)中定义的内部类: 其三.匿名内部类. 下面,我将说明这几种嵌套类的使用及注意事项. 二.静态嵌套类 如下所示代码为定义一个静态嵌套类

C++ 嵌套类使用(一)

一.嵌套类 在一个类的内部定义另一个类,我们称之为嵌套类(nested class),或者嵌套类型.之所以引入这样一个嵌套类,往往是因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现,且同时可以对用户隐藏该底层实现.     虽然嵌套类在外围类内部定义,但它是一个独立的类,基本上与外围类不相关.它的成员不属于外围类,同样,外围类的成员也不属于该嵌套类.嵌套类的出现只是告诉外围类有一个这样的类型成员供外围类使用.并且,外围类对嵌套类成员的访问没有任何特权,嵌套类对外围类成员的

java嵌套类和内部类详解

可以在一个类的内部定义另一个类,这种类称为嵌套类(nested classes),它有两种类型:静态嵌套类和非静态嵌套类.静态嵌套类使用很少,最重要的是非静态嵌套类,也即是被称作为内部类(inner).嵌套类 从JDK1.1开始引入.其中inner类又可分为三种: 其一.在一个类(外部类)中直接定义的内部类: 其二.在一个方法(外部类的方法)中定义的内部类: 其三.匿名内部类. java嵌套类(Nested Classes)总结 http://www.cnblogs.com/aigongsi/a

JAVA 嵌套类和内部类

一.什么是嵌套类及内部类?  可以在一个类的内部定义另一个类,这种类称为嵌套类(nested classes),它有两种类型:  静态嵌套类和非静态嵌套类.静态嵌套类使用很少,最重要的是非静态嵌套类,也即是被称作为  内部类(inner).嵌套类从JDK1.1开始引入.其中inner类又可分为三种:  其一.在一个类(外部类)中直接定义的内部类;  其二.在一个方法(外部类的方法)中定义的内部类;  其三.匿名内部类.  下面,我将说明这几种嵌套类的使用及注意事项. 二.静态嵌套类  如下所示代

java嵌套类(Nested&amp;nbsp;Classes)总结

转自:http://www.cnblogs.com/aigongsi/archive/2012/04/24/2467183.html Nested Classes定义 在java语言规范里面,嵌套类(Nested Classes)定义是: A nested class is any class whose declaration occurs within the body of another class or interface. A top level class is a class t

java 嵌套类 简记

嵌套类包括:1)静态嵌套类  (static 修饰符) 2)非静态嵌套类(又叫内部类) 其中内部类又可分为三种: 其一.在一个类(外部类)中直接定义的内部类: 其二.在一个方法(外部类的方法)中定义的内部类: 其三.匿名内部类. 访问规则总结: 1)静态嵌套类: 1. 静态嵌套类可以直接访问外部类的静态成员变量, 但不能直接访问外部类的非静态成员变量 ,其访问规则与静态成员变量相似,即静态方法不能直接访问非静态成员.      2.外部类不能直接访问静态嵌套类的成员变量, 但是可以通过类对象来访

C#嵌套类

嵌套类顾名思义就是类或者结构中定义的类 class Container { class Nested { Nested() { } } } <1>嵌套类的默认访问权限是private ,可以指定为public,protected,private,internal,protected internal.<2>嵌套类型可以访问外部类(包裹嵌套类的类),如果要访问外部类型,要把外部类通过构造函数传进一个实例<3>嵌套类中只能访问外部类中的静态成员,不能直接访问外部类的非静态成