c++类构造函数详解_.docx

上传人:PIYPING 文档编号:11614098 上传时间:2021-08-26 格式:DOCX 页数:7 大小:13.69KB
返回 下载 相关 举报
c++类构造函数详解_.docx_第1页
第1页 / 共7页
c++类构造函数详解_.docx_第2页
第2页 / 共7页
c++类构造函数详解_.docx_第3页
第3页 / 共7页
c++类构造函数详解_.docx_第4页
第4页 / 共7页
c++类构造函数详解_.docx_第5页
第5页 / 共7页
亲,该文档总共7页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《c++类构造函数详解_.docx》由会员分享,可在线阅读,更多相关《c++类构造函数详解_.docx(7页珍藏版)》请在三一文库上搜索。

1、c+类构造函数详解_ 这篇文章主要介绍了c+类构造函数示例,需要的伴侣可以参考下 代码如下: /一、 构造函数是干什么的 /* 类对象被创建时,编译系统对象安排内存空间,并自动调用该构造函数-由构造函数完成成员的初始化工作 eg: Counter c1; 编译系统为对象c1的每个数据成员(m_value)安排内存空间,并调用构造函数Counter( )自动地初始化对象,初始化之后c1的m_value值设置为0 故:构造函数的作用:初始化对象的数据成员。*/ class Counter public: / 类Counter的构造函数,以类名作为函数名,无返回类型 Counter() m_valu

2、e = 0; private: int m_value; / 类私有的数据成员 /二、 构造函数的种类 #include using namespace std; class Complex private : double m_real; double m_imag; public: /*无参数构造函数 / 假如创建一个类你没有写任何构造函数,则系统会自动生成默认的无参构造函数,函数为空,什么都不做 / 只要你写了一个下面的某一种构造函数,系统就不会再自动生成这样一个默认的构造函数,假如盼望有一个这样的无参构造函数,则需要自己显示地写出来 Complex(void) m_real = 0.0

3、; m_imag = 0.0; /*一般构造函数(也称重载构造函数) /一般构造函数可以有各种参数形式,一个类可以有多个一般构造函数,前提是参数的个数或者类型不同(基于c+的重载函数原理) /例如:你还可以写一个 Complex(int num)的构造函数出来,创建对象时依据传入的参数不同调用不同的构造函数 Complex(double real, double imag) m_real = real; m_imag = imag; /*复制构造函数(也称为拷贝构造函数) /复制构造函数参数为类对象本身的引用,用于依据一个已存在的对象复制出一个新的该类的对象,一般在函数中会将已存在对象的数据成

4、员的值复制一份到新创建的对象中 /若没有显示的写复制构造函数,则系统会默认创建一个复制构造函数,但当类中有指针成员时,由系统默认创建该复制构造函数会存在风险,具体缘由在有关 “浅拷贝”、“深拷贝”的文章中论述 Complex(const Complex c) / 将对象c中的数据成员值复制过来 m_real = c.m_real; m_imag = c.m_imag; /*类型转换构造函数,依据一个指定的类型的对象创建一个本类的对象,需要留意的一点是,这个其实就是一般的构造函数,但是对于消失这种单参数的构造函数,C+会默认将参数对应的类型转换为该类类型, /有时候这种隐私的转换是我们所不想要的

5、,所以需要用法explicit来限制这种转换。 /例如:下面将依据一个double类型的对象创建了一个Complex对象 Complex(double r) m_real = r; m_imag = 0.0; / 等号运算符重载(也叫赋值构造函数) / 留意,这个类似复制构造函数,将=右边的本类对象的值复制给等号左边的对象,它不属于构造函数,等号左右两边的对象必需已经被创建。 / 若没有显示的写 =运算符重载,则系统也会创建一个默认的=运算符重载,只做一些基本的拷贝工作 Complex operator=(const Complex rhs ) / 首先检测等号右边的是否就是左边的对象本身,若

6、是本对象本身,则挺直返回 if ( this = rhs ) return *this; / 复制等号右边的成员到左边的对象中 this-m_real = rhs.m_real; this-m_imag = rhs.m_imag; / 把等号左边的对象再次传出,目的是为了支持连等 eg:a=b=c 系统首先运行 b=c 然后运行 a=(b=c的返回值,这里应当是复制c值后的b对象) return *this; ; /三、用法上面定义的类对象来说明各个构造函数的用法: int main() / 调用了无参构造函数,数据成员初值被赋值为0.0 Complex c1,c2; / 调用一般构造函数,数

7、据成员初值分别被赋为指定值 Complex c3(1.0,2.5); / 当然,也可以用法下面的形式 / Complex c3 = Complex(1.0,2.5); / 把c3的数据成员的值赋值给事先被创建的对象c1 / 由于c1已经事先被创建,故此处不会调用任何构造函数 / 只会调用 = 号运算符重载函数 c1 = c3; / 调用类型转换构造函数 / 系统首先调用类型转换构造函数,将5.2创建为一个本类的临时对象,然后调用等号运算符重载,将该临时对象赋值给c2 c2 = 5.2; / 调用拷贝构造函数( 有下面两种调用方式) Complex c5(c3); Complex c4 = c3; / 留意和 =运算符重载的区分,这里等号左边的对象不是事先已经创建,故需要调用拷贝构造函数,参数为c2 / 这一点格外重要,这儿是初始化,不是赋值。 / 其实这儿就涉及了C+中的两种初始化的方式:复制初始化和赋值初始化。 / 其中c5采纳的是复制初始化,而c4采纳的是赋值初始化,这两种方式都是要调用拷贝构造函数的。 更多信息请查看IT技术专栏 .

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1