我不明白的是为什么构造函数参数是引用类型的会如此依赖参数是指针类型的,难道是因为参数是指针类型的构造函数计算了指针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_
3 回答

九州编程
TA贡献1785条经验 获得超4个赞
是的
String是类,而char *是变量类型
就好比String是房屋,char *是砖头,房屋是砖头盖起来是,这是一个道理。
构造函数的参数是引用String,也就是构造函数的参数是引用的对象的类是自己,而String类是由字符串指针来实现的,所以有依赖关系。

RISEBY
TA贡献1856条经验 获得超5个赞
String::String(const String& s)并不依赖String::String(const char* str),
理由是删掉后者(类声明和实现体),前者还能正常工作,所以没有依赖

慕仙森
TA贡献1827条经验 获得超8个赞
感觉这里你的理解有点问题。
你的第二个构造函数时拷贝构造函数,是用于避免内部指针浅拷贝的。
它并不依赖第一个构造函数,你就觉得它依赖第一个构造函数,是因为你只有这个手段产生对象。如果你还有其余构造函数,它就更加不依赖了。
其余的构造函数是生成对象,这个构造函数是解决浅拷贝的指针悬挂问题的。
添加回答
举报
0/150
提交
取消