如何用c语言实现CString的构造函数,析构函数和赋值函数

2025-06-22 06:25:09
推荐回答(5个)
回答1:

1、首先C语言没办法实现构造函数和析构函数,因为C语言是面向过程的语言,没有定义面向对象的class概念。C++语言是以C语言为基础扩展出来的一种编程语言,它在继承了C语言的基础上,增加了面向对象的编程方法,其中就包含了class。

2、如果你所描述的c语言是指C++语言,那么是可以自已定义并实现CString类的一些功能。因为CString类是微软VC++ MFC实现的基础类,而非C++标准类库,所以CString类定义中使用了一些AFX函数,依赖于MFC环境,所以想自定义一个完全取代CString的类很困难,也无意义。

3、如果只是需要学习CString的构造函数、析构函数及赋值函数,可以参考MFC类库源文件:
\MICROSOFT VISUAL STUDIO\VC98\MFC\Include\AFX.INL
\MICROSOFT VISUAL STUDIO\VC98\MFC\SRC\STRCORE.CPP
\MICROSOFT VISUAL STUDIO\VC98\MFC\SRC\WINSTR.CPP

回答2:

类是编程人员表达自定义数据类型的C++机制。它和C语言中的结构类似,C++类

支持数据抽象和面向对象的程序设计,从某种意义上说,也就是数据类型的设

计和实现。
那么 String 类的原型如下
class String
{
public:
String(const char *str=NULL); //构造函数
String(const String &other); //拷贝构造函数
~String(void); //析构函数
String& operator=(const String &other); //等号操作符重载,赋值函数
ShowString();
private:
char *m_data; //字符指针
};
String::~String()
{
delete [] m_data; //析构函数,释放地址空间
}
String::String(const char *str)
{
if (str==NULL)//当初始化串不存在的时候,为m_data申请一个空间存放'/0';
{
m_data=new char[1];
*m_data='/0';
}
else//当初始化串存在的时候,为m_data申请同样大小的空间存放该串;
{
int length=strlen(str);
m_data=new char[length+1];
strcpy(m_data,str);
}
}
String::String(const String &other)//拷贝构造函数,功能与构造函数类似。
{
int length=strlen(other.m_data);
m_data=new [length+1];
strcpy(m_data,other.m_data);
}
String& String::operator =(const String &other) //赋值函数
{
if (this==&other)//当地址相同时,直接返回;
return *this;

delete [] m_data;//当地址不相同时,删除原来申请的空间,重新开始构造;
int length=sizeof(other.m_data);
m_data=new [length+1];
strcpy(m_data,other.m_data);
return *this;
}

String::ShowString()//由于m_data是私有成员,对象只能通过public成员函数来访问;
{
cout<m_data<}

测试一下:
main()
{
String AD;
char * p="ABCDE";
String B(p);
AD.ShowString();
AD=B;
AD.ShowString();
}

回答3:

哈哈,这个嘛,你可以看一下库,而且最简单的办法不是自己编,因为已经在库中了,其实cstring就是C中的string.h不信你到C++库中看CString的文件它用了一个命名空间然后包含了string.h如果自己编的话,很麻烦,也不现实,因为那些都是伟人之作,看看都很难懂,再造如同登天,那可不是一个人之作呀。
所以麻实现的代码就是
#include

回答4:

还不能删除了吗

整天显示待修改有完没完

回答5:

CString 是MFC里自带的类,会用就行了。