刚刚发现了个问题,一直卡着我
class CA
{
public:
CA(){}
~CA(){}
public:
VOID
operator = ( CA& msg )
{
dwvalue = msg.dwvalue;
}
private:
DWORD dwvalue;
};
VOID
Fuck1(
OUT list& bb
)
{
list< CA > aa;
CA a;
CA b;
aa.push_back(a);
aa.push_back(b);
// list< CA > cc = aa;
bb = aa;
}
VOID
RegisteFunction(
VOID
)
{
list< CA > bb;
Fuck1( bb );
return;
}
我要是以上面的写法 是编译不过的,
有两种方法,第一种 :把 fuck1中的bb=aa去掉,改成list< CA > cc = aa;这种写法,就可以编译通过,
第二种,把类的运算符重载改成operator = ( CA* msg ),也是可以编译通过的
当然 还可以把重载运算符去掉。。。但是 我其实是想做一个list的赋值操作,而且那个类是定义好的,里面需要有个重载运算符的操作,
所以我想问问:
1、 list< CA > cc = aa方式和先声明一个list cc; 再做 cc=aa;的操作有什么区别?
2、运算符重载上我看都是用的引用,指针的写法可以吗?有什么区别?
using namespace std;
class CA
{
public:
CA(){}
~CA(){}
public:
CA& operator = (const CA& msg )
{
dwvalue = msg.dwvalue;
}
private:
int dwvalue;
};
void Fuck(list< CA >& bb)
{
list< CA > aa;
CA a;
CA b;
aa.push_back(a);
aa.push_back(b);
bb = aa;
}
int main(int argc, char* argv[])
{
cout << "11" << endl;
}
赋值运算符重载错误
1、第一种调用的是拷贝构造函数,第二种调用的是构造函数和赋值运算符
2、运算符操作的值还是指针
using namespace std;
class CA
{
public:
CA(){}
~CA(){}
public:
CA& operator = (const CA& msg )
{
dwvalue = msg.dwvalue;
}
private:
int dwvalue;
};
void Fuck(list< CA >& bb)
{
list< CA > aa;
CA a;
CA b;
aa.push_back(a);
aa.push_back(b);
bb = aa;
}
int main(int argc, char* argv[])
{
cout << "11" << endl;
}
赋值运算符重载错误
using namespace std;
class CA
{
public:
CA(){}
~CA(){}
public:
CA& operator = (const CA& msg )
{
dwvalue = msg.dwvalue;
}
private:
int dwvalue;
};
void Fuck(list< CA >& bb)
{
list< CA > aa;
CA a;
CA b;
aa.push_back(a);
aa.push_back(b);
bb = aa;
}
int main(int argc, char* argv[])
{
cout << "11" << endl;
}
赋值运算符重载错误
1、 list< CA > cc = aa方式和先声明一个list cc; 再做 cc=aa;的操作有什么区别?
第一种调用的是拷贝构造函数,第二种调用的是构造函数和赋值运算符。
2、都可以,运算符重载说白了就是函数,你参数定义的不同,就是调用方式有区别。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。