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.希望各位遇到文中错误可以告诉我,大家一起学习一起进步。