
//首先,什么是构造函数?
/ *创建类对象时,编译器系统对象分配内存空间并自动调用构造函数->构造函数完成成员的初始化
例如: 计数器c1;
编译系统为对象c1的每个数据成员(m_value)分配内存空间,并调用构造函数Counter()自动初始化该对象. 初始化后,将c1的m_value值设置为0
因此: 构造函数的作用: 初始化对象的数据成员. * /
班台计数器
{
public: //类Counter的构造方法,以类名作为函数名,没有返回类型
Counter(){
m_value = 0;
}
私人:
int m_value; //类私有数据成员
}
//第二,构造函数的类型
#include
使用命名空间标准;
复杂类

{
私人:
double m_real;
double m_imag;
公共:
// *没有参数构造函数
//如果不编写任何构造函数来创建类,系统将自动生成默认的无参数构造函数,该函数为空,并且什么也没做
///只要编写以下构造函数之一c++类构造函数,系统将不再自动生成此类默认构造函数. 如果您想要这样的无参数构造函数,则需要明确地将其写出.
复杂(无效)
{m_real = 0.0;
m_imag = 0.0;
}
// *常规构造函数(也称为重载构造函数)
//通用构造函数可以具有各种参数形式,并且一个类可以具有多个通用构造函数,只要参数的数量或类型不同(基于C ++重载函数的原理)
//例如: 您还可以编写Complex(int num)构造函数,并根据创建对象时传入的参数调用不同的构造函数
复杂(双重实数,双重影像)
{m_real = real;
m_imag = imag;

}
// *复制构造函数(也称为复制构造函数)
//复制构造函数的参数是对类对象本身的引用,该对象用于基于现有对象复制该类的新对象. 通常,将现有对象的数据成员的值复制到函数中. 复制到新创建的对象
///如果没有显示写复制构造函数,则系统默认会创建一个复制构造函数,但是当类中有指针成员时,系统会默认创建复制构造函数,这会有风险. 具体原因与“在文章“浅拷贝”和“深拷贝”中讨论
Complex(const Complex&c)
{//复制对象c中的数据成员值
m_real = c.m_real;
m_imag = c.m_imag;
}
// *类型转换构造函数根据指定的对象类型创建此类的对象. 需要注意的一件事是,这实际上是一个通用构造函数,但是对于单参数构造函数,C ++默认会将与参数对应的类型转换为该类型c++类构造函数,
//有时这种隐私转换是不可取的,因此我们需要使用显式限制转换.
//例如: 以下将基于双精度类型对象创建一个Complex对象
复杂(双r)
{m_real = r;
m_imag = 0.0;
}
//等号运算符重载(也称为赋值构造函数)
//请注意,这类似于复制构造函数,后者将=右侧的对象的值复制到等号左侧的对象. 它不属于构造函数. 必须创建等号左右两侧的对象.

//如果未显示=运算符重载,系统还将创建默认的=运算符重载,并且仅执行一些基本的复制工作
Complex&operator =(const Complex&rhs)
{//首先检查等号的右边是否是左边的对象本身,如果是对象本身,则将直接返回
if(this ==&rhs)
{返回* this;
}
///将等号右侧的成员复制到左侧的对象
this-> m_real = rhs.m_real;
this-> m_imag = rhs.m_imag;
///等号左侧的对象再次发出,目的是支持连续等待,例如: a = b = c系统首先运行b = c,然后运行a =的返回值(b = c,这里应该是c值之后的副本b对象)
返回* this;
}
};
//三,使用上面定义的类对象来说明每个构造函数的用法:
int main()
{
//调用无参数构造函数,并将数据成员的初始值分配为0.0
复杂的c1,c2;

//将调用通用构造函数,并将数据成员的初始值分配给指定的值.
复杂c3(1.0,2.5);
//当然,您也可以使用以下表格
//复杂c3 =复杂(1.0,2.5);
//将c3的数据成员的值分配给先前创建的对象c1
//由于c1是预先创建的,因此此处不会调用任何构造函数
//仅调用=运算符重载函数
c1 = c3;
//调用类型转换构造函数
//系统首先调用类型转换构造函数,创建5.2作为此类的临时对象,然后调用等号运算符重载将临时对象分配给c2
c2 = 5.2;
//调用复制构造函数(有两种调用方式)
复杂的c5(c3);
复杂 = c3;
//请注意重载和=运算符之间的区别,此处尚未提前创建等号左侧的对象,因此需要调用复制构造函数,参数为c2
//这尤其重要,这里是初始化,而不是赋值.
//实际上,C ++中涉及两种初始化方法: 复制初始化和赋值初始化.
//其中,c5使用复制初始化,使用赋值初始化. 这两种方法都需要调用复制构造函数.
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-288941-1.html
这就是明目张胆的挑衅
我不觉得自己多勇敢