C++构造函数实例——拷贝构造,赋值
Posted codeworkerliming
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++构造函数实例——拷贝构造,赋值相关的知识,希望对你有一定的参考价值。
#define _CRT_SECURE_NO_WARNINGS //windows系统
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
class student
private:
char *name;
int age;
public:
student(const char *n = "no name", int a = 0)
name = new char[100]; // 比malloc好!
strcpy(name, n);
age = a;
cout << "构造函数,申请了100个char元素的动态空间" << endl;
student & operator=(const student &s)
strcpy(name, s.name);
age = s.age;
cout << "赋值函数,保证name指向的是自己单独的内存块" << endl;
return *this; //返回 “自引用”
student(const student &s)
// 拷贝构造函数 Copy constructor
name = new char[100];
strcpy(name, s.name);
age = s.age;
cout << "拷贝构造函数,保证name指向的是自己单独的内存块" << endl;
void display(void)
cout << name << ", age " << age << endl;
virtual ~student()
// 析构函数
cout << "析构函数,释放了100个char元素的动态空间" << endl;
delete[] name; // 不能用free!
;
int main()
//student s; //编译错误,类中实现了构造函数,因此,需要有参数
student k("John", 56);
student mm(k); //拷贝构造函数
student m("lill", 666);
m.display();
m = k; //赋值函数
k.display();
mm.display();
return 0;
运行结果:
构造函数,申请了100个char元素的动态空间
拷贝构造函数,保证name指向的是自己单独的内存块
构造函数,申请了100个char元素的动态空间
lill, age 666
赋值函数,保证name指向的是自己单独的内存块
John, age 56
John, age 56
析构函数,释放了100个char元素的动态空间
析构函数,释放了100个char元素的动态空间
析构函数,释放了100个char元素的动态空间
const char *n = "no name",必须添加const
以上是关于C++构造函数实例——拷贝构造,赋值的主要内容,如果未能解决你的问题,请参考以下文章
c++类大四个默认函数-构造函数 析构函数 拷贝构造函数 赋值构造函数
C++类和对象(构造函数析构函数拷贝构造函数赋值运算符重载Const成员)详细解读