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++构造函数,析构函数,拷贝构造函数和赋值构造函数

c++类大四个默认函数-构造函数 析构函数 拷贝构造函数 赋值构造函数

C++类和对象(构造函数析构函数拷贝构造函数赋值运算符重载Const成员)详细解读

C++类和对象(构造函数析构函数拷贝构造函数赋值运算符重载Const成员)详细解读

C++类和对象(构造函数析构函数拷贝构造函数赋值运算符重载Const成员)详细解读