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

 我来答
keyuth
2016-07-24 · TA获得超过825个赞
知道小有建树答主
回答量:215
采纳率:0%
帮助的人:84.8万
展开全部
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
百度网友8d8cdaf
2016-11-07 · TA获得超过2709个赞
知道小有建树答主
回答量:691
采纳率:82%
帮助的人:260万
展开全部
类是编程人员表达自定义数据类型的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<<this->m_data<<endl;
}

测试一下:
main()
{
String AD;
char * p="ABCDE";
String B(p);
AD.ShowString();
AD=B;
AD.ShowString();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友afa1129
2016-07-05 · TA获得超过235个赞
知道小有建树答主
回答量:244
采纳率:71%
帮助的人:120万
展开全部
哈哈,这个嘛,你可以看一下库,而且最简单的办法不是自己编,因为已经在库中了,其实cstring就是C中的string.h不信你到C++库中看CString的文件它用了一个命名空间然后包含了string.h如果自己编的话,很麻烦,也不现实,因为那些都是伟人之作,看看都很难懂,再造如同登天,那可不是一个人之作呀。
所以麻实现的代码就是
#include <string.h>
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
duzhishuang
2016-09-26 · 超过73用户采纳过TA的回答
知道小有建树答主
回答量:150
采纳率:62%
帮助的人:90.8万
展开全部

还不能删除了吗

整天显示待修改有完没完

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cdetective
2016-08-03 · 超过24用户采纳过TA的回答
知道答主
回答量:100
采纳率:100%
帮助的人:37万
展开全部
CString 是MFC里自带的类,会用就行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式