C++语言嵌套类与局部类
小标 2018-06-15 来源 : 阅读 779 评论 0

摘要:本文主要向大家介绍了C++语言嵌套类与局部类,通过具体的代码向大家展示,希望对大家学习C++语言有所帮助。

本文主要向大家介绍了C++语言嵌套类与局部类,通过具体的代码向大家展示,希望对大家学习C++语言有所帮助。

代码编译运行环境:VS2012+Debug+Win32

1.嵌套类

1.1嵌套类的定义

在一个类体中定义的类叫作嵌套类。拥有嵌套类的类叫外围类。

1.2嵌套类的作用

定义嵌套类的初衷是建立仅供某个类的成员函数使用的类类型。目的在于隐藏类名,减少全局的标识符,从而限制用户能否使用该类建立对象。这样可以提高类的抽象能力,并且强调了两个类(外围类和嵌套类)之间的主从关系。

1.3嵌套类的使用示例  

#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 AB's member function

对嵌套类的若干说明: 
(1)从作用域的角度来看,嵌套类与外围类是两个完全独立的类,只是主从关系,二者不能相互访问,也不存在友元关系。

(2)从访问权限的角度来看,嵌套类既可为私有,也可为公有。在上面的例子中,嵌套类B的访问权限是public,可以在外围类的成员函数之外使用该嵌套类,使用时加上名字限定。如果将嵌套类B的访问权限设置为private,那么只能在外围类内使用。

(3)嵌套类中的成员函数可以在它的类体外定义。

(4)嵌套类可以访问外围类的静态成员变量,即使它的访问权限是私有的,访问方式通过”ClassName::staticVarName”来直接访问。

2.局部类

2.1局部类的定义

在一个函数体内定义的类称为局部类。局部类可以定义自己的数据成员和函数成员。它也是一种作用域受限的类。

2.2使用示例

#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)局部类只能在定义它函数内部使用,在其他地方不能使用。

(2)局部类的所有成员函数都必须定义在类体内,因此在结构上不是特别灵活。

(3)在局部类的成员函数中,可以访问上级作用域的所有变量,如函数局部变量、全局变量等。

(4)局部类中不能定义静态数据成员,因为这种数据成员的初始化无法完成,静态成员数据的定义和初始化必须放在全局作用域。

在实践过程中,局部类很少使用。

以上就介绍了C/C+的相关知识,希望对C/C+有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程