首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux C加加 类之构造函数!

简 介

本章主要介绍一下C++类中的构造函数的相关知识,主要包含构造函数的重载与缺省构造函数。

构造函数的重载

因为构造函数带有参数,按照函数重载的概念,只要构造函数的参数类型不同或参数的个数不同,构造函数就可以重载。构造函数可以通过参数表的不同及其差别化构成重载关系。例如:

class Student{

public:

Student(void){//无参构造函数

m_name = "";

m_age =10;

}

Student(string const & name,int age){

m_name = name;

m_age = age;

}

string m_name;

int m_age;

};

在类中对象实例化的过程中,重载的构造函数通过构造实参的类型来选择对应的构造函数。

不同对象的创建方式表示不同类型的对象,例如:

Integer(void){ ... } //Integer a;

Integer(int i){ ... } //Integer n(123);

Integer(string const &i){ ... } //Integer s("123");

Integer(Integer const & n){ ... } //Integer m = n;

不同意义的构造函数

1、缺省构造函数:可以构造默认状态的对象,例如: A a;

2、类型转换构造函数:将一种类型的对象转换为另一种类型的对象,例如:A a; B b = a;

3、拷贝构造函数:构造已有对象的副本,就是对象的克隆。

缺省构造函数

缺省构造函数也被称为无参构造函数,但是它并不是真正的没有任何参数。为一个有参构造函数的每个参数都提供一个缺省值,这样也可以达到无参构造函数同样的效果。

带缺省参数的构造函数:构造函数带有参数,按照缺省参数的概念,构造函数就可以带有缺省参数。使用缺省参数可以减少构造函数重载版本的数量,但是使用缺省参数时应注意避免与重载冲突。

在上面的代码中定义了一个带有缺省参数的构造函数,如果定义了此类构造函数,就不要再重载无参构造函数了。因为无参构造函数与这个构造函数是冲突的。

如果一个类没有定义任何构造函数,那么编译器会为其提供一个缺省构造函数,该构造函数对基本类型的成员变量,不做初始化;对类类型的成员变量和基类子对象,调用相应类型的缺省构造函数初始化。编译器提供的构造函数不会出现在源文件中,而是直接生成完成特定功能的机器(汇编)指令。

对于已经定义至少一个构造函数的类,无论其构造函数是否带有参数,编译器都不会再为其提供缺省构造函数。这种情况下,若该类需要支持以缺省方式构造对象,则必须自己定义缺省构造函数,否则将导致编译错误。

在上面代码中,由于类中提供了带参构造函数,编译器就不会再为类Student添加缺省构造函数了。就会出现编译错误,为防止此类错误,应添加缺省构造函数代码。例如:

Student{

m_name = "";

age = 0;

};

在使用数组或者容器的时候有时候需要自己定义缺省构造函数,即使该构造函数什么都不做。某些早期的C++编译器不支持对象数组的初始化语法,因此数组的元素必须先以缺省的方式构造。

当一个类可能作为另一个类的成员子对象时,需要为该类提供缺省的构造函数。因为他可能被另一个类的成员子对象以缺省的方式调用。

当父对象的成员子对象不适合缺省构造的时候,可以为他的父对象提供自定义的缺省构造函数,并在这里显式的用非缺省的方式构造该子对象。

class Date{

Date(int year,int month,int day){ ... }

};

class User{

User(void):m_data(2018,1,6){}

Date m_date;//成员子对象

};

欢迎加入C/C++学习交流群:五六七六二五六六八 不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括小编自己整理的一份2018最新的C/C ++和0基础入门教程,欢迎初学和进阶中的小伙伴。

每天晚上20:00群里都有免费的课程给大家分享C/C ++知识和路线方法,群里会不定期更新最新的教程和学习方法(进群送2017C/C ++学习教程),大家都是学习C/C 游戏编程的,或是转行,或是大学生,还有工作中想提升自己能力的C/C 党,如果你是正在学习C/C 游戏编程的小伙伴可以加入学习。最后祝所有程序员都能够走上人生巅峰,让代码将梦想照进现实,非常适合新手学习,有不懂的问题可以随时问我,工作不忙的时候希望可以给大家解惑。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180106A0ETGP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券