浅谈C++构造函数

浅谈C++构造函数

构造函数的本意是在创建对象的时候初始化对象,编译器会根据传递的实参来匹配不同的(重载的)构造函数,有以下几种构造函数:

//复数类
class Complex{
public:
    Complex(): m_real(0.0), m_imag(0.0){ }
    Complex(double real, double imag): m_real(real), m_imag(imag){ }
     Complex(double real): m_real(real), m_imag(0.0){ } 
     Complex(const Complex &c)
     {this->m_real = c.m_real;
		this->m_imag = c.m_imag;
	}
	
public:
	void func(void); 
  	void display(void);
private:
    double m_real;  //实部
    double m_imag;  //虚部
};
  1. 默认构造函数。就是编译器自动生成的构造函数。以 Complex 类为例,它的原型为:
    Complex(); //没有参数

  2. 普通构造函数。就是用户自定义的构造函数。以 Complex 类为例,它的原型为:
    Complex(double real, double imag); //两个参数

  3. 拷贝构造函数。在以拷贝的方式初始化对象时调用。以 Complex 类为例,它的原型为:
    Complex(const Complex &c);

  4. 转换构造函数。将其它类型转换为当前类类型时调用。以 Complex 为例,它的原型为:
    Complex(double real);

不管哪一种构造函数,都能够用来初始化对象,这是构造函数的本意。
假设 Complex 类定义了以上所有的构造函数,那么下面创建对象的方式都是正确的:
纯文本复制

Complex c1();  //调用Complex()
Complex c2(10, 20);  //调用Complex(double real, double imag)
Complex c3(c2);  //调用Complex(const Complex &c)
Complex c4(25.7);  //调用Complex(double real)

这些代码都体现了构造函数的本意——在创建对象时初始化对象。

除了在创建对象时初始化对象,其他情况下也会调用构造函数,例如,以拷贝的的方式初始化对象时会调用拷贝构造函数,将其它类型转换为当前类类型时会调用转换构造函数{Complex a(10.0, 20.0); a= 255.5}。这些在其他情况下调用的构造函数,就成了特殊的构造函数了。特殊的构造函数并不一定能体现出构造函数的本意。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值