c++构造函数

构造函数的目的就是对数据成员进行初始化,构造函数可以在类内定义也可以在类外定义,在类内定义和定义一般函数的方法基本一致,在类外构造函数需要注意的一点就是构造函数没有返回类型。在使用构造函数的时候需要注意的几点

(1)每建立一个对象,就调用一次构造函数

(2)构造函数没有返回值,因此也没有类型,因此不需要再定义构造函数是声明类型。

(3)构造函数不需要用户调用,也不能被用户调用。

(4)可以用一个类对象初始化另一个类对象。

(5)构造函数的名字必须与类名同名。

下面是带参数的构造函数代码运行示例

以下代码功能均是计算长方体的体积

#include<iostream>
using namespace std;
class box
{public:box(int,int,int);int volume();private:int height;int width;int length;
};
box::box(int h,int w,int len)
{height=h;width=w;length=len;
}
int box::volume()
{return(height*width*length);
}
int main()
{box box1(12,25,30);cout<<"the volume of box1 is"<<box1.volume()<<endl;box box2(15,30,21);cout<<"the volume of box2 is"<<box2.volume()<<endl;return 0;
}

当然除了以上方法还能用函数初始化表对数据成员进行初始化。下面这段程序是构造函数的重载和用参数初始化表初始数据成员的例子

构造函数重载需要注意的几点

(1)如果在建立对象是选用的无参构造函数应该这样定义BOX box1而不是这样定义 BOX box1();

(2)一个类可以包含多个构造函数,但是对于每一个对象来说,建立对象只执行其中一个构造函数。

附代码

#include<iostream>
using namespace std;
class box
{public:box();//定义一个无参构造函数 box(int h,int w,int len):height(h),width(w),length(len){}; //定义一个有参的构造函数,用参数的初始化表对数据成员初始化 int volume();private:int height;int width;int length;
};
box::box()  //在类外定义无参构造函数box
{height=10;width=10;length=10;
}
int box::volume()
{return (height*width*length);
}
int main()
{box box1;  // 建立对象box1不指定实参 注意写法box1()不对 cout<<"the volume of box1 is"<<box1.volume()<<endl;box box2(15,30,25); //建立对象box2指定3个实参 cout<<"the volume of box2 is"<<box2.volume()<<endl;return 0;
}

进一步改进:使用默认参数的构造函数需要注意的几点

(1)应在声明构造函数时指定默认值,不能只在定义构造函数时指定默认值。、

(2)最好不同时使用构造函数的重载和有默认参数的的构造函数比如  box() box(int,int=10,int=10)(有一个参数不是默认参数)容易出现歧义

#include<iostream>
using namespace std;
class box
{public:box(int h=10,int w=10,int len=10);int volume();private:int height;int width;int length;} ;box::box(int h,int w,int len){height=h;width=w;length=len;}int box::volume(){return (height*width*length);}int main(){box box1;cout<<"the volume of box1 is"<<box1.volume()<<endl;box box2(15);cout<<"the volume of box2 is"<<box2.volume()<<endl;box box3(15,30);cout<<"the volume of box3 is"<<box3.volume()<<endl;box box4(15,30,20);cout<<"the volume of box4 is"<<box4.volume()<<endl;}

c++学习笔记之构造函数相关推荐

  1. RecyclerView源码学习笔记(一)构造函数和setLayoutManager方法

    前言 RecyclerView已经出来很久,现在几乎应该都会用RecyclerView代替Listview,虽然我觉得大多数人应该还是不太清楚这两者之前的区别的,或者说RecyclerView相对于L ...

  2. C++学习笔记-----在一个构造函数中调用另一个构造函数

    在构造函数中调用另一个构造函数如果一不注意就会有无限递归的危险,而且构造函数的参数的不同也决定了调用的不同,所以特意总结了一下哪些形式的调用时允许的: 首先假设构造函数调用时参数都是外部的变量,而不是 ...

  3. Mini 容器学习笔记4——组件的生命周期(应用篇)

    Mini容器支持6中生命周期类型: 1. Singleton :单利类型(缺省组件都是单利类型的生命周期,由容器进行托管的) [Test]public void SingletonLifestyleT ...

  4. Mini 容器学习笔记6——组件的获取(应用)

    1. 通过组件Id获取组件实例: [Test]public void GetByIdTest(){ServiceRegistry.Register<Person>("person ...

  5. Vuex 4源码学习笔记 - 通过dispatch一步步来掌握Vuex整个数据流(五)

    在上一篇笔记中:Vuex 4源码学习笔记 - Store 构造函数都干了什么(四) 我们通过查看Store 构造函数的源代码可以看到主要做了三件事情: 初始化一些内部变量以外 执行installMod ...

  6. CLR Via C# 学习笔记(5) 静态构造函数的性能

    CLR Via C#>这本书以前就粗略看过两遍,但一直都没能深入理解,而且很多内容也忘记了,现在准备重新看一遍,并将看过的部分写出来,因为写的过程也是一个加深理解的过程.本系列算是学习的一个记录 ...

  7. 学习笔记----MATLAB面向对象编程入门02--类的方法、构造函数

    本系列内容为<MATLAB面向对象编程–从入门到设计模式>学习笔记,特此说明. 定义类的方法 类的方法(Method)一般用来查询(Query)对象的状态,或者向对象发出一个命令(Comm ...

  8. 【C++学习笔记2】构造函数、析构函数、函数多态、抽象类、函数模板

    这次笔记介绍构造函数.析构函数.函数多态.抽象类.函数模板 一.构造函数 1.在定义对象,构造函数程序将自动执行,他的类型跟类名一致 函数声明最好放在自己的类里面,这样才符合类的封装,也可以像下面一样 ...

  9. atomic原子类实现机制_JUC学习笔记--Atomic原子类

    Atomic 原子操作类包 Atomic包 主要是在多线程环境下,无锁的进行原子操作.核心操作是基于UnSafe类实现的CAS方法 CAS CAS: compareAndSwap :传入两个值:期望值 ...

最新文章

  1. 怎样学好C语言,一个成功人士的心得!
  2. Mycat高可用集群搭建
  3. Redis底层数据结构实现
  4. 作业四 | 个人项目-小学四则运算 “软件”之初版
  5. php 合并 js css,PHP实现合并多个JS和CSS文件示例
  6. 胡润发布《2019胡润80后白手起家富豪榜》:拼多多黄峥1350亿第一
  7. linux echo 当前时间,linuxecho
  8. 快捷键关机电脑_电脑还可以这样关机?炫技术的时候到了!
  9. 朱恒志20135314实验2 实验报告
  10. reactbootstrap php,什么是React-Bootstrap
  11. ctfshow-菜狗杯-web(一)
  12. 将两条类似的sql合并
  13. 《大话移动通信(第2版)》赠书活动名单公告
  14. 想换4K显示器了?那你搞懂啥是4K了吗?
  15. 什么是 jQuery?
  16. JAVA图形面积与周长(抽象类)
  17. hook(2)Activity启动流程,安卓开发实战
  18. 笔记本电脑麦克风不能用的一些解决办法
  19. mysql特殊字段名称_Mysql必读MySQL创建带特殊字符的数据库名称方法示例
  20. CSP 2022 复赛游记

热门文章

  1. 激励和设定可实现的目标是任何学习成功的关键。
  2. Latex Smartdiagram
  3. 在线抠图工具:亲测有效
  4. Oracle 应用短连接导致连接风暴
  5. Mac OS Sierra安装Imagick
  6. redis 源码安装
  7. 【开卷故意】记录一次高并发下的死锁解决思考过程
  8. [转]java中byte转换int时为何与0xff进行与运算
  9. 字符串对比 (STl强制转换字符串)
  10. Flying to the Mars