总的一句话概括:限制创建那些完全没有初始化的对象。那种对象没意义。所以我们要尽量限制掉默认构造函数,自己写一个带参数的初始化构造函数。

首先需要知道的是我们是在什么样的情况下才需要限制对象的创建。限制对象的创建不代表我们想禁止创建对象,只是加以限制而已,限制创建对象时能够按照我们需要的那样创建,而不能随意的创建对象。

比如下面代码,我们定义了一个book类,声明对象的时候自然是为了描述某一本具体的书,这个时候如果我们直接采用book a;这样的方式创建一个对象a,编译当然是不会有问题的,毕竟系统会自动生成默认构造函数的。但是这样创建的对象a能代表什么呢?指的又是哪一本书?完全不清楚!

class book
{
public:void setprice(double a);double getprice();void settitle(char* a);char * gettitle();void display();
private:double price;char * title;
};

解决方法:

1、不声明默认构造函数:

class book
{
public:book(char *a, double p);void setprice(double a);double getprice();void settitle(char* a);char * gettitle();void display();
private:double price;char * title;
};

2、将默认构造函数声明为 private:

class book
{
public:book(char *a, double p);void setprice(double a);double getprice();void settitle(char* a);char * gettitle();void display();
private:
book(){}double price;char * title;
};

根据上面的几个例子,我们将系统不会自动生成默认构造函数的情况总结如下:

  • 类中显式地声明了默认构造函数,无论其属性被设置为public、private还是protected,系统都不会再自动生成默认构造函数了。
  • 类中显式地声明了其它任意一个不是默认构造函数的构造函数,系统均不会再自动生成默认构造函数。

其实这两点可以总结为一点,那就是当类中显示地声明了任意一个构造函数,系统均不会再自动生成构造函数。

C++利用构造函数限制对象的创建相关推荐

  1. 面向对象——访问器、修改器、构造函数、对象的创建流程

    在之前的代码讲解中,我们将一类事物封装成一个类,再去创建一个相应的对象去调用方法完成相应的操作这是非常方便的,但是在之前的代码我们发现,对象不仅仅能调用类中的方法,还可以访问到该类中的成员变量并进行赋 ...

  2. 利用构造函数创建对象

    利用构造函数创建对象 <!DOCTYPE html> <html lang="en"><head><meta charset=" ...

  3. activexobject对象不能创建_脚本语言系列之Python | Python面向对象

    Python是做自动化工作首选的一门语言,与更复杂的语言相比,Python 非常便于快速学习.语法很少,具有良好的 可读性,即使测试工程师们没有丰富的编码经验,也能快速学会:Python 的极简风格对 ...

  4. 2020.10.25 对象的创建 利用构造函数创建对象 遍历对象属性 遍历函数属性和属性数值for in 内置对象

    输出遵循变量的值就近原则 对象创建方法 : 第一种 var obj = { uname:'dengzhu',//属性的创建,多个属性创建之间用逗号隔开 sex: male; sayHi: functi ...

  5. 【C++】day03 - 【类型与对象的概念】【类型】【构造函数】【一个对象创建的过程】【构造函数的应用】【头文件和实现文件的分离】【this指针】【析构函数】

    目录 一.类型与对象的概念 1.1什么是对象 1.2类型 二.如何在计算机中描述类型 2.1使用结构体(struct)对类型进行描述 2.2使用类(class)对类型进行描述 三.构造函数 3.1构造 ...

  6. 35 利用构造函数和原型对象实现继承

    技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.概述 ES6之前并没有给我们提供extends继承,我们可以通过构造函数+原型对象模拟 ...

  7. 【C++】利用构造函数对类对象进行初始化

    运行环境:VS2017 一.对象的初始化 每一个对象都应当在它建立之时就有就有确定的内容,否则就会失去对象的意义. class Time {int hour = 0;int min = 0;int s ...

  8. JavaScript对象的创建

    原文 简书原文:https://www.jianshu.com/p/6cb1e7b7e379 大纲 前言 1.简单方式创建对象的方法 2.工厂模式创建对象 3.构造函数模式创建对象 4.原型模式创建对 ...

  9. activexobject对象不能创建_【设计模式】建造者模式:你创建对象的方式有它丝滑吗?...

    目录 什么是建造者模式 为什么要使用建造者模式 构造函数创建对象 set方式构建对象 java实现建造者模式 第一种实现方式 第二种方式 建造者模式与构造函数的对比 建造者模式与工厂模式的对比 总结 ...

最新文章

  1. JZOJ 5710. 【北大夏令营2018模拟5.13】Mex
  2. Asp.net开发中甩掉.ashx .asmx
  3. 汇编程序:将字符串中所有大写字符转为小写
  4. Gym - 100543L
  5. 35 SD配置-销售凭证设置-定义项目类别组
  6. Eset易视Smart灵巧护卫Security
  7. 卡卡通小熊win7桌面主题+非主流win7主题下载
  8. isFinite方法详解
  9. iOS HTTPS证书不受信任解决办法
  10. Urule规则引擎快速搭建
  11. pip list 后出现“warning:Ignoring invalid distribution -orch”
  12. 参与澳门熊猫创意征名,喜获欧盛M55“爱拍”影音手机
  13. python 营销软件_最近超火的赚钱工具Python到底怎么用?
  14. POI和easyExcel使用(2)PoI对Excel的基本读写操作
  15. C#程序如何配置应用程序以在具有高 DPI 设置(例如 150%)的机器上正确运行
  16. 三人行discuz采集论坛发贴王破解版
  17. 有关Inner、Outer等相关词汇的理解(二)
  18. ChatGPT 设计游戏剧情 | 基于 AI 5 天创建一个农场游戏,完结篇!
  19. combiner函数的使用注意事项和代码演示
  20. 如何构建数字化时代的人才转型方案,Adobe用人工智能给出方案

热门文章

  1. C++ 下使用curl 获取ftp文件
  2. UA MATH564 概率论VI 数理统计基础3 卡方分布的正态近似
  3. UA MATH566 统计理论 截断数据
  4. C#字符串截取学习总结
  5. 图解Oracle同义词
  6. 图解Windows网络命令使用实例
  7. Struts2官网翻译
  8. Hibernate调用存储过程
  9. java word转html 报错 org/apache/poi/xwpf/usermodel/IRunBody
  10. centos 上 crontab 计划任务 ,这个版本解释的比较清晰