
在类主体中定义的类称为嵌套类. 具有嵌套类的类称为类.
定义嵌套类的初衷是创建仅由某个类的成员函数使用的类类型. 目的是隐藏类名称并减少全局标识符,从而限制用户是否可以使用此类创建对象. 这样可以提高类的抽象能力c 嵌套类,并强调两个类(类和嵌套类)之间的主从关系.
#include <iostream>
using namespace std;
class A
{
public:
class B
{
public:
B(char* name){
cout<<"constructing B:"<<name<<endl;
}
void printB();
};
B b;
A():b("In class A"){
cout<<"constructing A"<<endl;
}
};
void A::B::printB(){
cout<<"B's member function"<<endl;
}
int main(int argc,char* argv[])
{
A a;
A::B b("outside of A");
b.printB();
}

程序的输出:
constructing B:In class A
constructing A
constructing B:outside of A
B's member function
(1). 从作用域的角度来看,嵌套类和类是两个完全独立的类,只有主从关系,两者不能互相访问,也没有朋友关系.

(2). 从访问权限的角度来看,嵌套类可以是私有的也可以是公共的. 在上面的示例中,嵌套类B的访问权限是公共的,并且可以在类的成员函数之设备类中使用.
(3). 嵌套类中的成员函数可以在其类之外定义.
(4). 嵌套类可以访问类的静态成员变量和枚举成员,即使它们的访问权限是私有的,也可以通过“ ClassName :: staticVarName”直接访问该访问方法.

在函数主体中定义的类称为局部类. 本地类可以定义自己的数据成员和函数成员. 这也是一类范围有限的课程.
#include <iostream>
using namespace std;
int global=100;
void func(){
static int s;
class A{
//static int t;//编译出错
public:
int num;
void init(int i){s=i;}
void print(){
num=global;
cout<<num<<endl;
}
};
A a;
a.init(8);
cout<<"s:"<<s<<endl;
a.print();
}
int main(int argc,char* argv[])
{
func();
}
输出结果:

s:8
100
(1). 本地类只能在定义它的函数中使用c 嵌套类,而不能在其他地方使用.
(2). 本地类的所有成员函数必须在类主体中定义,因此结构上不是特别灵活.
(3). 在本地类的成员函数中,您可以访问上级作用域的所有变量,例如函数局部变量和全局变量.
(4). 无法在本地类中定义静态数据成员,因为无法完成此类数据成员的初始化,并且必须将静态成员数据的定义和初始化置于全局范围内.
(5). 实际上,很少使用本地类.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-169073-1.html
好喜欢这一次的采访
够了解还那么多无知的喷子
质检总局都买不着真货