博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
试验C++构造函数,析构函数,拷贝构造函数和赋值构造函数
阅读量:5149 次
发布时间:2019-06-13

本文共 1742 字,大约阅读时间需要 5 分钟。

 

试验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;
}

转载于:https://www.cnblogs.com/wb118115/archive/2012/11/07/2759665.html

你可能感兴趣的文章
set学习记录
查看>>
用函数写注册功能
查看>>
JVM笔记4:Java内存分配策略
查看>>
IE8 window.open 不支持此接口 的问题解决
查看>>
Django -- 发送HTML格式的邮件
查看>>
最近面试问题汇总
查看>>
ORM版学员管理系统3
查看>>
修改安卓虚拟机系统镜像
查看>>
windows 2003 Server平台Delphi程序不支持直接调用webservice
查看>>
电子书下载:Professional ASP.NET Design Patterns
查看>>
random 产生一个随机数的方法
查看>>
RST_n的问题
查看>>
欢迎来我的#百度相册#时光轴,坐上时光机,与我一起穿梭时空!
查看>>
------结对作业代码复审-----
查看>>
ASP.NET 获得当前网页名字
查看>>
windows pear 安装
查看>>
22Spring基于配置文件的方式配置AOP
查看>>
H5页面在微信端的分享
查看>>
python13 1.函数的嵌套定义 2.global、nonlocal关键字 3.闭包及闭包的运用场景 4.装饰器...
查看>>
例6-5
查看>>