标签:color 利用 .cpp style std 记录 复制 成员 复制构造
在C++中存在一个特殊函数,他就是复制构造函数,假如我们有类A,如果有A a;A b=a; 在这种情况下利用A类变量a来给同是A类变量的b来赋值,这个时候类会使用复制构造函数,如果我们不显式声明复制构造函数,那么类将会调用默认的复制构造函数。下面的代码说明了这一情况,如果我们将类StringBad中的复制构造函数StringBad(StringBad &)去掉,那么count最后输出的结果会为复制(count为静态变量用来记录类StringBad的对象个数)。
main.cpp
#include <iostream> #include"StringBad.h" using namespace std; int main() { StringBad * src=new StringBad("src"); StringBad srb("srb"); StringBad srd=srb; delete src; return 0; }
StringBad.h
#include<iostream> #include<stdio.h> using namespace std; class StringBad{ public: static int count; char * name; StringBad(char * name); StringBad(StringBad &); ~StringBad(); };
StringBad.cpp
#include"string.h" #include<iostream> #include<stdio.h> #include"StringBad.h" using namespace std; int StringBad::count=0; StringBad::StringBad(char * name){ this->name=new char(strlen(name)+1); strcpy(this->name,name); count++; cout<<"创建新对象"<<(this->name)<<"后,还有"<<count<<"个对象"<<endl; } StringBad::~StringBad(){ count--; cout<<"析构"<<(this->name)<<"之后,还有"<<count<<"个对象"<<endl; } StringBad::StringBad(StringBad & s) { count++; this->name=new char(strlen(s.name)+1); strcpy(this->name,s.name); cout<<"调用复制函数后,还有"<<count<<"个对象"<<endl; }
标签:color 利用 .cpp style std 记录 复制 成员 复制构造
原文地址:http://www.cnblogs.com/JsonZhangAA/p/7196893.html