试验C++构造函数,析构函数,拷贝构造函数和赋值构造函数

Posted zsl6658

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了试验C++构造函数,析构函数,拷贝构造函数和赋值构造函数相关的知识,希望对你有一定的参考价值。

                           试验C++构造函数,析构函数,拷贝构造函数和赋值构造函数 

#include "stdafx.h"
#include <iostream>
#include <string.h>

using namespace std;

class student
{
public:
 student()
 {
  cout<<"default constructor is called!"<<endl;
  name=new char[1];
  name[0]='/0';
  age=0;
 }
 student(char* name,int age)
 {
  if(name==NULL)
  {
   this->name=new char[1];
   name[0]='/0';
  }
  else
  {
   this->name=new char[strlen(name)+1];
   strcpy(this->name,name);
   cout<<"constructing student:"<<this->name<<endl;
   this->age=age;
  }
 }
 student(const student& stu)
 {
  this->name=new char[strlen(stu.name)+strlen("copy of")+1];
  strcpy(this->name,stu.name);
  strcat(this->name,"copy of");
  cout<<"constructing student:"<<this->name<<endl;
  this->age=stu.age;
  
 }
 student& operator=(const student& stu)
 {
  if(this==&stu)  //检查自赋值用指针比较,不能用对象比较,对象比较函数未定义
   return *this;
  if(this->name)
   delete this->name;
  this->name=new char[strlen(stu.name)+strlen("===construct")+1];
  strcat(stu.name,"===construct");
  strcpy(this->name,stu.name);
  cout<<"constructing student by ====!"<<endl;
  this->age=stu.age;
  return *this;
 }
 ~student()
 {
  cout<<"destructing student:"<<this->name<<"age:"<<this->age<<endl;

  if(this->name)
   delete this->name;
  this->name=NULL;
 }
private:
 char* name;
 int age;
};
student test(student s)     //实参传递给形参的时候调用拷贝构造函数
{
 cout<<"in the test function!"<<endl;
 student s2("temp",22);
 //返回临时对象前先拷贝构造一个临时对象,然后复制给实参
 //返回栈空间,程序本身有问题。但是拷贝构造函数将原来的对象在一个新空间构造,
 //所以不存在内存泄露。
 return s2; //好像编译器调用析构函数去析构自己产生的临时对象出错
}
int main(int argc, char* argv[])
{
 cout<<"start the programing!"<<endl;
 student stu("roger",11);
 cout<<"to execute the test()!"<<endl;
 //int i=0;
 //while(i++<10000000)
 student s3("gugy",23);
 s3=test(stu);   //调用赋值函数
 cout<<"exit the programing!"<<endl;
 return 0;
}

以上是关于试验C++构造函数,析构函数,拷贝构造函数和赋值构造函数的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

C++初阶:类和对象(中篇)构造函数 | 析构函数 | 拷贝构造函数 | 赋值运算符重载

C++类与对象(详解构造函数,析构函数,拷贝构造函数,赋值重载函数)

C++初阶第五篇——类和对象(中)(构造函数+析构函数+拷贝构造函数+赋值操作符重载)