⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex_copycon.cpp

📁 Visual C++应用教程-源代码 本书在复习C++基础知识后
💻 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 + -