语法似乎没有问题。但是无法运行,发生生成错误。
难道是因为构造函数吗?我自定义了一个传参构造函数,以及一个空构造函数。
在写重载函数的时候 需要声明一个Person对象,temp,如果将一下代码的 空构造函数注释掉,会报错。
但是不注释空构造函数的话,会出现绿色波浪线 ——>显示重载。
代码如下:
#include<iostream> using namespace std; class Person { public: int m_age; int m_weight; string m_name; string m_gender; Person(); Person(int age, int weight, string name, string gender) { this->m_age = age; this->m_gender = gender; this->m_name = name; this->m_weight = weight; } ~Person() { cout << "调用析构函数" << endl; } }; //通过全局函数重载 .格式如下: //类名 operator+ (参数1,参数2,参数....,参数n) Person operator+ (Person& p1, Person& p2) { Person temp; temp.m_age = p1.m_age + p2.m_age; temp.m_gender = p1.m_gender + p2.m_gender; temp.m_name = p1.m_name + p2.m_name; temp.m_weight = p1.m_weight + p2.m_weight; return temp; //可不可以返回 &temp ?把返回类型改成 &person ? } //有了重载的函数后,在使用时就可以直接 p = p1 + p2 . void show(Person& p) { cout << "name:\t" << p.m_name << endl; cout << "his gender:\t" << p.m_gender << endl; cout << "his age:\t" << p.m_age << endl; cout << "his weight:\t" << p.m_weight << endl; } int main() { Person a(10,20,"Kobe_","Super"); Person b(15,30,"Bryant" , "star"); Person ok = a + b; //编译可以通过。重载完成。 show(ok); system("pause"); return 0; }
应该是重载函数的问题,全局重载函数中的 temp 编译始终无法通过。
解决方法:将自定义的两个构造函数都注释掉,就可以编译通过,正常运行了。。。。无语
#include<iostream> using namespace std; class Person { public: int m_age; int m_weight; ~Person() { cout << "调用析构函数" << endl; } }; Person operator+(Person& p1, Person& p2) { Person temp; temp.m_age = p1.m_age + p2.m_age; temp.m_weight = p1.m_weight + p2.m_weight; return temp; } void show(Person& p) { cout << "his age:\t" << p.m_age << endl; cout << "his weight:\t" << p.m_weight << endl; } int main() { Person a; Person b; a.m_age = 10; a.m_weight = 20; b.m_age = 11; b.m_weight = 21; Person ok = operator+(a,b); //编译可以通过。 Person James = ok + a; //直接相加也可以通过 show(ok); cout << " " << endl; show(James); system("pause"); return 0; }
存在疑惑:
1.如果我需要定义一个Person对象,比如temp时,我想直接给temp一个初始值,怎么办?难道不可以使用传参构造吗?
2.自定义一个空的构造函数也不能运行,这是为什么?难道默认的空构造函数 与 我 自己写的空构造函数重载吗?
3.