• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 构造函数定义为private或者protected的好处

构造函数定义为private或者protected的好处

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了构造函数 private,构造函数的定义,java构造函数的定义,构造函数未定义,c#构造函数的定义等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

将构造函数,析构函数声明为私有和保护的,那么对象如何创建?已经不能从外部调用构造函数了,但是对象必须被构造,应该如何解决,麻烦大家帮忙说明,关于构造,析构函数声明为私有和保护时的用法??? 提出这个问题,说明你已经对c++有所思考了。

从语法上来讲,一个函数被声明为protected或者private,那么这个函数就不能从“外部”直接被调用了。
对于protected的函数,子类的“内部”的其他函数可以调用之。
而对于private的函数,只能被本类“内部”的其他函数说调用。

语法上就是这么规定的,你肯定也知道的咯。
那么为什么有时候将构造函数或者析构函数声明为protected的或者private的?

通常使用的场景如下:
1。如果你不想让外面的用户直接构造一个类(假设这个类的名字为A)的对象,而希望用户只能构造这个类A的子类,那你就可以将类A的构造函数/析构函数声明为protected,而将类A的子类的构造函数/析构函数声明为public。例如:

A a; // error
B b; // ok
</div>
2. 如果将构造函数/析构函数声明为private,那只能这个类的“内部”的函数才能构造这个类的对象了。这里所说的“内部”不知道你是否能明白,下面举个例子吧。

public:
    void Instance()//类A的内部的一个函数
    {
        A a;
    }
};
</div>
上面的代码是能通过编译的。上面代码里的Instance函数就是类A的内部的一个函数。Instance函数体里就构建了一个A的对象。

但是,这个Instance函数还是不能够被外面调用的。为什么呢?

如果要调用Instance函数,必须有一个对象被构造出来。但是构造函数被声明为private的了。外部不能直接构造一个对象出来。
A aObj; // 编译通不过
aObj.Instance();
但是,如果Instance是一个static静态函数的话,就可以不需要通过一个对象,而可以直接被调用。如下:

    public:
    static A& Instance()
    {
        static A a;
        return a;
    }

    void Print()
    {
        cout << data << endl;
    }

private:
    int data;
};

A& ra = A::Instance();
ra.Print();
</div>
上面的代码其实是设计模式singleton模式的一个简单的C++代码实现。

还有一个情况是:通常将拷贝构造函数和operator=(赋值操作符重载)声明成private,但是没有实现体。
这个的目的是禁止一个类的外部用户对这个类的对象进行复制动作。
细节请看《effective C++》里面的条款27。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 构造函数定义为private或者protected的好处

相关文章

  • 2017-05-28c/c++中变量的声明和定义深入解析
  • 2017-05-28用C语言来实现一个简单的虚拟机
  • 2017-05-28linux c程序中获取shell脚本输出的实现方法
  • 2017-05-28基于C语言实现的扫雷游戏代码
  • 2017-05-28Qt 实现桌面雪花飘落代码
  • 2017-05-28C++普通函数指针与成员函数指针实例解析
  • 2017-05-28CreateThread()与beginthread()的区别详细解析
  • 2017-05-28学习C和C++的9点经验总结
  • 2017-05-28C++基础教程之指针拷贝详解
  • 2017-05-28c++验证哥德巴赫猜想

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++火车入轨算法的实现代码
    • c计算闰年
    • C语言中获取进程识别码的相关函数
    • C++中继承与组合的区别详细解析
    • C++使用一个栈实现另一个栈的排序算法示例
    • 分享C++面试中string类的一种正确写法
    • Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系
    • 函数指针的强制类型转换实现代码
    • C++用Dijkstra(迪杰斯特拉)算法求最短路径
    • 获取本地网卡适配器信息具体代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有