C++面向对象程序设计——构造函数

本文详细介绍了C++中的构造函数,包括构造函数的两种初始化方式、构造函数的作用、无参与带参数的构造函数、构造函数的重载以及如何使用默认参数。通过实例展示了构造函数在初始化对象和设置数据成员初值时的重要性。
摘要由CSDN通过智能技术生成

一、问题引入:数据成员初始化

  1. 对数据成员进行初始化

方法1:

Class Time

 { public:

  Hour;

  Minute;

  Sec;

};

Time T1={14,56,30};

这种初始化方法仅用于对象的成员均为public的情况。如果数据成员是私有的,或者类中有private或protected的数据成员就不能用这种方法进行初始化

方法2:

用成员函数对对象中的数据成员赋初值。

二、构造函数概述

  1. 构造函数的定义
  2. 不需要用户来调用他;,而是在建立对象时自动执行。
  3. 构造函数的名字必须与类名同名,而不能任意命名,以便于编译系统能识别他,并把他当构造函数处理。
  4. 他具有任何类型,不具有返回值。
  5. 既可以在类内定义构造函数,也可以先在类内声明,后在类外定义函数。
  6. 如果用户没有自己定义构造函数,c++系统会自动生成一个构造函数,只是这个构造函数函数体是空的,也没有参数,不执行初始化操作;

(参照代码1 构造函数的使用)

第三行便是系统自动给的初值。

  1. 什么时候调用构造函数
  1.  在建立类对象时,会自动调用构造函数,在建立对象时系统会该对象分配存储单元。此时执行构造函数,就把指定的初值送到有关数据成员的存储单元中。
  2. 每建立一个对象,就调用一次构造函数。
  3. 构造函数是在定义对象时由系统自动执行的,而且只能执行一次。
  4. 构造函数不能被用户调用。 如:t1.time()是错误的。
  1. 构造函数没有返回值,他的作用只是对对象进行初始化。因此也不需要在定义构造函数时声明类型。

Int time()

或void time()是不对的。

直接time()

  1. 可以用一个类对象初始化另一个类对象。

  Time t1;

  Time t2=t1;   //建立对象t2,并用一个t1来初始化t2;

此时相当于把t1的数据成员的值拷贝到t2相应各成员。

  1. 在构造函数的函数体中除了定义初值,还可以写其他语句。但为了程序清晰,一般不建议写其他内容。

  • 带参数的构造函数
  1. 带参数的构造函数中的形参,其对应的实参是在建立对象时给定的,即在建立对象时间同时指定数据成员的初值。
  2. 用这种方法可以方便地实现对不同对象进行不同的初始化。给不同的对象赋不同的初值。
  3. 优点:很直观,很方便,在定义语句直接看到数据成员的初值。
  4. 格式:

构造函数名(类型1 形参1,类型2 形参2,…)

如: box(int h,int w,int l);

类名 对象名(实参1,实参2,…);

如:box box1(10,20,30)

参照代码2;

  • 用参数初始化表对数据成员初始化
  1. 格式:在函数首部的末尾加一个冒号,然后列出参数的初始化表。

如:

Box::Box(int h,int w,int len):height(h),width(w),length(len){ }

用形参h的值初始化数据成员height,用形参w的值初始化数据成员

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值