我有这段代码:
int main()
{
String s1; // s1 == ""
assert(s1.length() == 0);
String s2("hi"); // s2 == "hi"
assert(s2.length() == 2);
cout << "SUCCESS" << endl;
}
我想编写一个将通过它并进入结尾的“cout”语句的类。
到目前为止,我只有这个:
#include <iostream>
#include <cassert>
#include <string>
using namespace std;
class String
{
int size;
char * buffer;
public:
String();
String(const String &);
String(const char *);
~String();
int length();
};
String::String()
{
buffer = 0;
}
String::String(const String &)
{
}
String::String(const char *)
{
buffer = 0;
}
String::~String()
{
delete[ ] buffer;
}
String::length()
{
}
到目前为止,我认为这是正确的,至少就如何构建一个类而言,但我不确定在一些成员函数中应该做什么。任何人都可以帮我或者向我展示一个例子,说明我需要让我的课程通过主程序并计算正确的缓冲区大小并读入字符串吗?
提前致谢。
答案 0 :(得分:1)
你对指针和数组有什么了解吗?
String基本上是一个字符数组。你需要做的是总是使用new []运算符分配适当的内存量,确保它应该被清除(你做对了,delete []运算符是正确的方法)和把你想要的内容放在那里。
复制构造函数应该迭代传递的char *(无论是在参数中还是在另一个String对象中的内部char * - 它都是相同的)并制作内容的副本。
在C ++中,通常使用“空终止字符串”,这意味着每个char *最后都有一个0(二进制,而不是ASCII字符0)。你可能需要的函数是strlen - 它返回参数中传递的字符串的长度(通过字符串我的意思是char *当然)