📄 ex_copycon.cpp
字号:
// [例Ex_CopyCon] 使用拷贝构造函数
#include <iostream.h>
#include <string.h>
class CName{
public:
CName()
{
strName = NULL; // 空值
cout<<"默认构造函数!"<<endl;
}
CName( char *str )
{
strName = (char *)new char[strlen(str)+1];
strcpy( strName, str ); // 复制内容
cout<<"构造函数!"<<endl;
}
CName( CName &one ) // 拷贝构造函数
{
// 为strName开辟独立的内存空间
strName = (char *)new char[strlen(one.getName())+1];
strcpy( strName, one.getName() ); // 复制内容
cout<<"拷贝构造函数!"<<endl;
}
CName( CName &one, char *add) // 带其他参数的拷贝构造函数
{
// 为strName开辟独立的内存空间
strName = (char *)new char[strlen(one.getName()) + strlen(add) +1];
strcpy( strName, one.getName() ); // 复制内容
strcat( strName, add); // 连接到strName中
cout<<"带他参拷贝构造函数!"<<endl;
}
~CName()
{
if (strName) delete []strName;
strName = NULL; // 一个好习惯
cout<<"析构函数!"<<endl;
}
char *getName()
{
return strName;
}
void setName( char *str )
{
if (strName) delete []strName;
strName = (char *)new char[strlen(str)+1];
strcpy( strName, str ); // 复制内容
}
private:
char *strName; // 字符指针,名称
};
void print( CName one)
{
cout<<one.getName()<<endl;
}
CName convert( int n )
{
if ( 0 == n )
return CName("0");
// 因CName构造函数允许将字符串构造成对象,因此先将n转换成字符串
// 即 123转换成“123”, -12转换成“-12”
int bits = 0; // 获取n的十进数位数
int nBak = n;
if (n<0) nBak = -n;
while ( nBak > 0 ) { nBak /= 10; bits++; }
if ( n < 0 ) bits++; // 负值再加一位
// 为字符串开辟空间
char *str =(char *)new char[bits+1];
char *p = str + bits; // 指向最后
*p = '\0'; // 设结束符
p--;
nBak = n; if (n<0) nBak = -n;
while ( nBak > 0 )
{
*p = nBak % 10 + '0'; // 转换成字符串
p--; nBak /= 10;
}
if ( n < 0 ) *p = '-';
// 转换结束
CName temp(str);
cout<<"1"<<endl;
delete []str; // 释放开辟的内存空间
return temp;
}
int main()
{
// CName o1("DING"); // 通过构造函数初始化
/* CName o2(o1);
cout<<o2.getName()<<endl;
CName o3(o1, " YOU HE");
cout<<o3.getName()<<endl;
CName o4 = CName(o3);*/
CName o1 = convert( -123 );
print( o1 );
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -