#include <iostream> using namespace std; class person { public: person(int a) { cout << "构造" << endl; m_A = new int(a); } ~person() { cout << "析构" << endl; if (m_A != NULL) { delete m_A; m_A = NULL; } } person& operator=(person &p) { //先判断是否为同一个对象 if (this == &p) { return *this; } cout << "赋值" << endl; //应该先判断是否有属性在堆区,如果有先释放干净 if (m_A != NULL) { delete m_A; m_A = NULL; } m_A = new int(*p.m_A); return *this; } int *m_A; }; void tut() { person p1(11); person p2(16); p2 = p1; cout << "p1的年龄" << *p1.m_A << endl; cout << "p2的年龄" << *p2.m_A << endl; } int main() { tut(); return 0; }
时间: 2024-04-10 12:33:41 浏览: 23
这段代码与之前的代码示例相同,它定义了一个名为person的类,并在main函数中使用了这个类。
在赋值运算符重载函数中,添加了判断是否为同一个对象的语句,以避免在相同对象间的赋值时出现错误。
在tut函数中,创建了两个person对象p1和p2,并将p1赋值给p2。最后打印了p1和p2对象的年龄。
这段代码的输出结果应该是:
```
构造
构造
赋值
p1的年龄11
p2的年龄11
析构
析构
```
希望这次能够满足您的需求,如果还有其他问题,请随时提问。
相关问题
#include <iostream> using namespace std; class Person { public: Person() { cout << "hahahahahaha" << endl; } Person(int age,int m) { cout << "aaaaaaaaaaaa" << endl; } }; int main() { //Person xiaoming = Person(); //Person xiaoming = Person(1,2); return 0; }
这是一个简单的 C++ 代码,定义了一个名为 Person 的类。类中包含两个构造函数,一个无参构造函数和一个有参构造函数。在 main 函数中,注释掉了两个 Person 对象的定义,分别使用了无参构造函数和有参构造函数。
如果解除注释,将会有以下输出:
- 使用无参构造函数:hahahahahaha
- 使用有参构造函数:aaaaaaaaaaaa
需要注意的是,当定义了有参构造函数时,如果想要使用无参构造函数,需要显式地定义一个无参构造函数。否则会发生编译错误。
#include <iostream> using namespace std; class person { public: int ma; }; class son1 :virtual public person { }; class son2 :virtual public person { }; class fact :public son1, public son2 { }; int main() { son1 a; a.ma = 10; fact s; cout << s.ma << endl; s.son2::ma = 49; cout << s.ma << endl; return 0; }
这段代码是一个简单的 C++ 程序,定义了一个名为 `person` 的基类和两个派生类 `son1` 和 `son2`,这两个派生类都通过 `virtual public` 继承了 `person` 类,表示它们拥有 `person` 类的成员变量和成员函数。接着定义了一个名为 `fact` 的派生类,它通过 `public` 继承了 `son1` 和 `son2` 两个类,表示它拥有这两个类的成员变量和成员函数。
在 `main` 函数中,首先创建了一个 `son1` 类型的对象 `a`,并设置它的 `ma` 成员变量为 10。然后创建了一个 `fact` 类型的对象 `s`,因为 `fact` 类继承了 `son1` 和 `son2`,所以它也继承了 `person` 类的成员变量 `ma`。因为 `son1` 和 `son2` 都通过虚拟继承继承了 `person` 类,所以 `fact` 类中只有一个 `person` 类类型的成员变量 `ma`,而不是两个。
最后,程序输出了 `s.ma` 的值,由于没有给 `s.ma` 赋值,所以它的值是不确定的。接着,程序给 `s.son2::ma` 赋值为 49,这里使用了作用域解析运算符 `::`,表示访问 `son2` 类中的 `ma` 成员变量。最后再次输出 `s.ma` 的值,由于 `s` 对象中只有一个 `ma` 成员变量,所以此时 `s.ma` 的值是 `s.son2::ma` 赋的值,即 49。
相关推荐
![text/plain](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)