#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) { 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-20 16:22:36 浏览: 208
这是一个简单的C++代码示例,它定义了一个名为person的类,并在main函数中使用了这个类。
该代码中的person类具有一个整型指针成员m_A,并在构造函数中进行初始化。析构函数中释放了m_A指针指向的内存。赋值运算符重载函数用于实现对象的赋值操作,首先释放了当前对象的m_A指向的内存,然后为其分配新的内存并进行赋值。
在tut函数中,创建了两个person对象p1和p2,并将p1赋值给p2。最后打印了p1和p2对象的年龄。
这段代码主要演示了C++中的构造函数、析构函数和赋值运算符重载的使用。
如果您有关于这段代码的具体问题或需要进一步解释,请随时提问。
相关问题
#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。
阅读全文