string类——构造函数的实现

C++——string 类——构造函数功能实现

总共实现五种普通构造函数及拷贝构造函数功能。

构造函数(普通):

1.无参数的构造函数——string();
2.string (size_type length,char ch);
3.string (const char * str);//字符串初始化。
4.string (const char * str,size_type length);
5.string (string & str,size_type index ,size_tyoe length);

构造函数(拷贝构造):

1.string (const string & str);


代码展示:

注:这里用size_t代替size_type进行实现。

首先是Mystring.h的头文件:
#pragma once
#include <iostream>
using namespace std;
class CMystring
{
private:
	char* n_str;
	size_t n_length;

public:
	CMystring();
	CMystring(size_t length, char ch);
	CMystring(const char* str);
	CMystring(const char* str, size_t length);
	CMystring(CMystring& str, size_t index, size_t length);

	CMystring(const CMystring& str);
	const char* c_str() const;

	~CMystring();
};

然后是函数实现文件:

#include "Mystring.h"

CMystring::CMystring()
{
	n_str = new char('\0');
	n_length = 0;
}
CMystring::CMystring(size_t length, char ch)//size_t——无符号整型。
{
	//合法性检验:
	if (length < 0)
	{
		abort();
	}

	n_str = new char[length + 1];
	for (size_t i = 0; i < length; i++)
	{
		n_str[i] = ch;
	}
	n_str[length] = '\0';
	n_length = length;
}
CMystring::CMystring(const char* str)
{
	const char* pStr = str;
	int nCount = 0;
	//得到长度:
	while (*pStr != '\0')
	{
		nCount++;
		pStr++;
	}
	//申请空间:
	n_str = new char[nCount + 1];

	//空间赋值:
	for (int i = 0; i < nCount + 1; i++)
	{
		n_str[i] = str[i];
	}

	n_length = nCount;
}
CMystring::CMystring(const char* str, size_t length)
{
	//合法性检验:
	if (str == NULL || length < 0)
	{
		abort();
	}
	//申请空间:
	n_str = new char[length + 1];
	//空间赋值:
	for (size_t i = 0; i < length + 1; i++)
	{
		n_str[i] = str[i];
	}

	n_str[length] = '\0';

	n_length = length;
}
CMystring::CMystring(CMystring& str, size_t index, size_t length)
{
	//检验合法性:
	if (index < 0 || length < 0)
	{
		abort();
	}
	//申请空间:
	n_str = new char[length + 1];
	//空间赋值:
	for (size_t i = index , j = 0 ; i < index + length ; i++ , j++)
	{
		n_str[j] = str.c_str()[i];
	}

	n_str[length] = '\0';

	n_length = length;
}

CMystring::CMystring(const CMystring& str)
{
	//申请空间:
	n_str = new char[str.n_length + 1];
	//空间赋值:
	for (size_t i = 0; i < str.n_length + 1; i++)
	{
		n_str[i] = str.c_str()[i];
	}
}

const char* CMystring::c_str() const
{
	return n_str;
}
CMystring::~CMystring()
{
	if (n_str != NULL)
	{
		delete[] n_str;
	}
}

最后是主函数:

#include "Mystring.h"
int main()
{
	CMystring str;

	CMystring str1(5,'b');
	cout << str1.c_str() << endl;

	CMystring str2("abcdefg");
	cout << str2.c_str() << endl;

	CMystring str3("abcdefg", 3);
	cout << str3.c_str() << endl;

	CMystring str4(str2, 1, 3);
	cout << str4.c_str() << endl;

	CMystring str5(str4);
	cout << str5.c_str() << endl;
	system("pause");
	return 0;
}

bbbbb
abcdefg
abc
bcd
bcd
请按任意键继续. . .


结束:

1.对非法情况的处理比较粗糙。
2.对size_t和size_type的理解仍然不太好。
3.希望各位遇到文中错误可以告诉我,大家一起学习一起进步。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值