码迷,mamicode.com
首页 > 编程语言 > 详细

解析C++转换构造函数(调用规则)

时间:2014-11-20 00:09:29      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:转换构造函数   c++   赋值   重载   

什么叫转换构造函数?


当一个构造函数只有一个参数,而且该参数又不是本类的const引用时,这种构造函数称为转换构造函数。


参考一下示例:


// TypeSwitch.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <IOSTREAM>
using namespace std;

class Complex
{
public:
	Complex():real(0),imag(0){};
	Complex(double r, double i):real(r), imag(i){};
    //1> 转换构造函数
	Complex(double r):real(r),imag(0)
	{
		cout<<"转换构造函数被调用。 \n";
	}; 

	void Print()
	{
		cout<< "real = " << real << " image = " << imag<< endl;
	}

	Complex& operator+(const Complex &cl)
	{
		this->real += cl.real;
		this->imag += cl.imag;
		return *this;
	}

    //2> = 赋值运算重载
// 	Complex& operator = (double i)
// 	{
// 		this->real = 0;
// 		this->imag = i;	
// 	    cout<<"赋值运算重载被调用"<<endl;
// 		return *this;
// 	}

private:
	double real;
	double imag;
};

int main(int argc, char* argv[])
{
	Complex cl;//构造函数Complex()被调用;
	cl.Print();//real = 0 imag = 0;
	cl = 1.5;  //1>转换构造函数被调用;如果1>,2>都存在,2> = 赋值运算重载会被调用;
	cl.Print();//1>的时候,real = 1.5 imag = 0; 1>,2>的时候,real = 0 imag = 1.5;
	cl = Complex(2,3);//构造函数Complex(double r, double i)被调用后,调用默认=赋值运算;
	cl.Print();//real = 2 imag = 3;
	cl = Complex(1, 1) + 2.5;//1>转换构造函数被调用;如果1>,2>都存在,1>转换构造函数被调用
	cl.Print();//real = 3.5 imag = 1;
	return 0;
}


P.S注释已经很详细,如果不清楚,可以自己debug一下。


解析C++转换构造函数(调用规则)

标签:转换构造函数   c++   赋值   重载   

原文地址:http://blog.csdn.net/chen_jint/article/details/41290847

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!