我不明白的是為什么構造函數參數是引用類型的會如此依賴參數是指針類型的,難道是因為參數是指針類型的構造函數計算了指針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
提交
取消