解决“不存在默认构造函数”的问题

我在学加法运算符重载,我在类person里建了一个返回类型为类person的运算符重载的函数,在这个函数里我建了个对象temp;
我想实现  :对象p1+对象p2
但是报错了,错误为:类 "person" 不存在默认构造函数

#include
using namespace std;

class person {
public:    
    //需要在此加上perosn(){};
	person operator+(const person& p) {
		person temp;//此处报错
		temp.age_a = this->age_a + p.age_a;
		temp.age_b = this->age_b + p.age_b;
		return temp;
	}
	person(int age_a, int age_b) {
		this->age_a = age_a;
		this->age_b = age_b;
	}
public:
	int age_a;
	int age_b;
};
void test() {
	person p1(10, 20);
	person p2(20, 30);
	person p3 = p1 + p2;
	cout << p3.age_a << p3.age_b << endl;
}
int main() {
	test();
	return 0;
}

解决方法:在person类中先创建个无参的构造函数类型;

有了这个类型你才能创建这种类型的对象;

#include 
using namespace std;
class person {
public:
    perosn(){};
	person operator+(person& p) {
		person temp;
		temp.m_a = p.m_a + this->m_a;
		temp.m_b = p.m_b + this->m_b;
		return temp;
	}
	int m_a;
	int m_b;
};
void test() {
	person p1;
	p1.m_a = 10;
	p1.m_b = 20;

	person p2;
	p2.m_a = 10;
	p2.m_b = 20;
	person p3 = p1 + p2;

	cout << p3.m_a << p3.m_b << endl;
}
int main() {
	test();
	return 0;
}

后来我发现,下面代码,没有为了temp而写无参构造函数啊,这也是可以的,为什么?

原来是:图一无参构造函数没写,只写了有参构造函数,系统也不给你无参构造函数了,所以temp居无定所。

2021.4.18:

或者写个有默认参数值的构造函数,这时可以不写出默认的构造函数了;

2021.8.8:

也可以使用"=default"来解决这个问题:

如果程序中已定义构造函数,默认情况下,编译器就不再隐含生成默认构造函数。如果此时依然希望编译器隐含生成默认构造函数,可以使用"=default"。

class person {
public:
    perosn() = default;
	person operator+(person& p) {
		person temp;
		temp.m_a = p.m_a + this->m_a;
		temp.m_b = p.m_b + this->m_b;
		return temp;
	}
	int m_a;
	int m_b;
};

你可能感兴趣的:(编程问题集锦,c++,类)