2012-11-20 36 views
0

我试图做一些我不完全确定的事情甚至是可能的。我试图重载一个等于操作是这样的:C++运算符重载类和结构

Class A //Defined somewhere 
Struct B{ 
    float bobsAge; 
}; 
B& operator=(A,B){ 
    A.GetAge("bob",B.bobsAge); 

    return B; 
} 

Function(getAge){ 
    A Names; 
    B structNames; 

    structNames = Names; 
} 

我明白,这也许是不可能的,因为据我所知,运营商=是用来做的事情,如设置相同的类型相同的一个对象到另一个对象。或者这是可能的,但我做错了什么。

提前致谢。

回答

1

你所试图做的是重载赋值运算符然而,标准的做法是提供一个转换构造函数:

class A 
{ 
public: 
    A(const B& b) { GetAge("bob", b.bobsAge; } 
}; 

然后让在隐式转换踢的表达式,如

A a; 
B b; 
a = b; // Assignment: calls A(const B&), and uses A's default assignment operator 
A a2 = b; // Construction: calls A(const B&) and A(const A&) 

你可以提供了一个赋值运算符

A& operator=(const B&); 

但是,只允许从BA,而不是构造赋值,这似乎很不直观。

2

您可以重载operator=但它必须在课堂上。有关类定义之外的内容,请参阅http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

例如

class foo { 
    foo& operator=(B b) { 
    //... 
    return *this; 
    }; 
}; 

虽然我不完全确定你想要做什么。

另外,它是赋值运算符 - 不要将其称为等号运算符。

3

operator=是一个赋值运算符,只能被覆盖里面的被分配给的类。所以在你的情况下,它将不得不在A内宣布。

“等于运算符”,即operator==,用于比较两个对象是否相等。