我不明白的是为什么构造函数参数是引用类型的会如此依赖参数是指针类型的,难道是因为参数是指针类型的构造函数计算了指针char* str的长度吗?
String::String(const char* str)
{
len = strlen(str);
this->str = new char[len + 1];
strcpy(this->str, str);
num_strings++;
}
String::String(const String& s)
{
this->len = s.len;
this->str = new char[this->len + 1];
strcpy(this->str, s.str);
num_strings++;
}
int String::length() const
{
return len;
}
String& String::operator=(char* s)
{
delete[] this->str;
len = strlen(s);
str = new char[len + 1];
strcpy(this->str, s);
return *this;
}
String& String::operator=(String& s)
{
if (str) {//如果str类成员存在
delete[]str;//释放它
str = NULL;
}
len = s.len;
str = new char[len + 1];
strcpy(str, s.str);
return *this;
}
—————————————————————————————————————下面是类:
#ifndef STRING_H_
#define STRING_H_
#include<iostream>
#include<cstring>
using std::cout;
using std::cin;
using std::endl;
namespace STRING {
class String
{
public:
//构造函数析构函数和其他方法
String();
~String();
String(const char* str);
String(const String& s);
int length()const;//返回len的方法
//重载运算符方法
String& operator=(char* s);
String& operator=(String& s);
char& operator[](int i);
const char& operator[](int i)const;
//友元函数 重载运算符
friend bool operator<(const String& t1, const String& t2);
friend bool operator>(const String& t1, const String& t2);
friend bool operator==(const String& t1, const String& t2);
friend std::ostream& operator<<(std::ostream& os, String& t);
friend std::istream& operator>>(std::istream& is, String& t);
//静态方法 返回num_string值的方法
static int HowMany();
private:
char* str;
int len;
static int num_strings;
static const int CINLIM = 80;
};
}
#endif // !STRING_H_
九州编程
RISEBY
慕仙森
相关分类