关于隐式转换、赋值重载的疑问直接上c++代码了。#include iostreamusing namespace stdclass A{private:i
关于隐式转换、赋值重载的疑问
直接上c++代码了。
#include <iostream>
using namespace std;
class A
{
private:
int a;
public:
void print(){a = 0;cout<<a;}
void printa(){cout<<"printa"<<endl;}
virtual ~A(){}
A(int a){cout<<"constructor"<<endl;}
A(A& a){cout<<"xxxx"<<endl;}
A(){cout<<"ad"<<endl;}
A operator=(char* a){cout<<"operator="<<endl; return *this;}
//A operator=(A& a){cout<<"qwerty"<<endl; return *this;}
};
int main(void)
{
A a;
a = 5;
cin.get();
}
环境是win7 64位和dev c++
这个代码是对的,能运行通过,但如果加入注释行代码就会出错,显示5不能转换为char*型。
请问下:
1 注释行不加,执行过程是什么样的?
2 加入了注释行为嘛会出错?
[解决办法]
A & operator=(const A & a); //#1
A & operator=(int a); //#2
A a;
a = 5; //这时会调用#2,不存在二义性啊,函数优先匹配最符合的参数
