C语言中,结构体能不能相加?
这个问题乍一看好像很简单,但是仔细一想,好像又没这么干过。
写个代码试下:
#includestruct Test { int a; int b; }; int main() { struct Test t1; struct Test t2; t1 + t2; return 0; }
t1 + t2;
root@turbo:~# gcc 1.c -o 1 1.c: In function ‘main’: 1.c:14:12: error: invalid operands to binary + (have ‘struct Test’ and ‘struct Test’) 14 | t1 + t2; | ^ root@turbo:~#
#includestruct Test { int a; int b; }; struct Test func(struct Test t1, struct Test t2) { struct Test t; t.a = t1.a + t2.a; t.b = t1.b + t2.b; return t; } int main() { struct Test t1; struct Test t2; //t1 + t2; func(t1, t2); return 0; }
Test operator+(Test t1, Test t2) { Test t; t.a = t1.a + t2.a; t.b = t1.b + t2.b; return t; }函数名就叫:operator+。
operator+(t1, t2);也可以直接写成:
t1 + t2;这种形式,看起来更加人性化。
root@turbo:~# g++ test.cpp -o test root@turbo:~#
class Test { private: int a; int b; public: Test operator+(Test t) { Test tmp; tmp.a = this->a + t.a; tmp.b = this->b + t.b; return tmp; } };加法运算符不仅能重载友元函数,还能重载成成员函数。然后还会涉及构造函数、析构函数、this指针等等一大堆机制。所以,你觉得C语言和C++,哪个更复杂一些?
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !