#include<iostream>
#include<string>
using namespace std;
class Complex
{
public:
Complex();
//单参构造 类型转换构造函数
explicit Complex(double real);//explicit 阻止隐式转换
//单参构造
Complex (Complex const & that);
~Complex();
void print()const
{
cout<<m_real<<"+"<<m_vir<<endl;
}
private:
double m_real;//实
double m_vir;//虚
};
int main()
{
Complex* p_ca=new(Complex);
p_ca.print();
Complex cp1(1.2);//显示调用
cp1.print();
Complex cp2=1.2;//隐式调用 单参构造把1.2转换成Complex类型 Complex cp2=Complex (1.2)
Complex cp3=cp1;//隐式调用
cp3.print();
Complex cp4(cp1);//显示调用
cp4.print();
Complex* pcp1=new Complex(cp1);
pcp1->print();
pcp1=&cp1;//不是拷贝构造
//Complex* pcp2=pcp1; 没有调用拷贝构造 就是一个类指针换了个指向地址
return 0;
}
Complex::Complex()
{
m_real=0;
m_vir=0;
cout<<"默认构造"<<endl;
}
Complex::Complex(double real)
{
m_real=real;
m_vir=0;
cout<<"类型转换单参构造"<<endl;
}
Complex::Complex (Complex const& that);
{
this->m_real=that.m_real;
this->m_vir=that.m_vir;
cout<<"拷贝构造"<<endl;
}
//编译器默认提供拷贝构造 写了拷贝构造函数就不提供任何构造函数 写了构造函数没写拷贝构造会默认提供拷贝构造函数