所以我在下面的代码行中遇到错误。
intVAR = myTYPEvar;
其中intVAR是一个整数,myTYPEvar是我编写的类,但应该传递一个整数的值,它保持私有。我认为.h中的运算符定义是必要的。
public:
int operator=(const myTYPE & INTin);
它在.cpp中定义为
int myTYPE::operator=(const myTYPE &myTYPEin){
return (myTYPEin.getprivateint());
}
它不会编译。我相信我错了。我错过了什么?
答案 0 :(得分:3)
您需要定义一个能够编写
的转换运算符intVAR = myTYPEvar;
例如
operator int() const { return myTYPEin.getprivateint(); }
考虑到在这种情况下,必须使用限定符const
定义成员函数getprivateint。
对于你的赋值运算符,它只分配表达式的含义,其中赋值运算符的类型为int。例如,使用赋值运算符,您可以编写
myTYPE obj1, obj2;
int x = obj1 = obj2;
在这种情况下,obj2的getprivateint()调用值将分配给x。
以下是您的作业运算符
的示例#include <iostream>
int main()
{
struct A
{
A( int x ) : x ( x ) {}
int operator = ( const A & a )
{
return a.x;
}
int x;
};
A a1( 10 ), a2( 20 );
int x = a1 = a2;
std::cout << "x = " << x
<< ", a1.x = " << a1.x
<< ", a2.x = " << a2.x << std::endl;
return 0;
}
输出
x = 20, a1.x = 10, a2.x = 20
但是你可能不会写例如
x = a1;
您需要转换运算符,如上所示。
或者如果要使用结构A的示例,代码将类似于
#include <iostream>
int main()
{
struct A
{
A( int x ) : x ( x ) {}
operator int() const { return x; }
int x;
};
A a1( 10 );
int x = a1;
std::cout << "x = " << x
<< ", a1.x = " << a1.x
<< std::endl;
return 0;
}
输出
x = 10, a1.x = 10
答案 1 :(得分:1)
int operator=(const myTYPE & INTin);
这样的赋值运算符只允许赋值 一个myTYPE
变量,而不是来自一个。
你要找的是什么转换运算符:
operator int() const {
return (myTYPEin.getprivateint());
}