非静态成员函数可以与其内部定义的类相同吗?
请解释我,因为我是编程新手
//defining class complex and adding it
class complex
{
private :
int real;
int imaginary;
public:
complex(){}
complex(int x1,int x2);
void display();
complex add(complex n1,complex n2) // can this member function be of complex? type
{
complex temp;
temp.real=n1.real+n2.imaginary;
return temp;
}
};
答案 0 :(得分:1)
任何成员函数都可以具有返回类型,该类型是声明它的类类型。
考虑例如operator =
重载。 operator =
是该类的非静态成员函数。
complex & operator =( const complex & )
{
// some stuff
return *this;
}
答案 1 :(得分:1)
没有这样的限制。成员函数可以具有普通函数可以接受的任何返回类型。
您的示例可行,但将此类add
函数视为无效,
因为它不会使用它被调用的对象的状态。
例如,你会这样做:
complex a,b,c,d;
a = b.add(c,d);
a
将是对c
和d
进行操作的结果。 <{1}}将不涉及任何内容。
答案 2 :(得分:0)
非静态成员函数可以与类名具有相同的类型吗?
* 复杂添加(复数n1,复数n2)//此成员函数是否可以是复杂类型
是的是简单的答案
答案 3 :(得分:0)
当然,是的。但是在你拥有函数add()
的方式中,它是静态成员函数还是非静态函数并不重要,因为你没有使用调用对象的成员。
您可能会发现代码更具表现力:
complex operator+(complex operand)
{
return complex(real + operand.real, imaginary + operand.imaginary);
}
然后您就可以使用&#39; +&#39;运营商以自然而富有表现力的方式,例如:
complex a(1,2);
complex b(3,4)
complex c = a + b;
在这种情况下,将为operator+
调用a
方法,并且在运算符的主体内,成员变量real
和imaginary
将隐式为{ {1}}的成员a
将由b
代表。