亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求助大佬,為什么兩個構造函數會產生依賴關系呢?求解釋!

求助大佬,為什么兩個構造函數會產生依賴關系呢?求解釋!

慕娘9325324 2021-12-31 13:09:19
我不明白的是為什么構造函數參數是引用類型的會如此依賴參數是指針類型的,難道是因為參數是指針類型的構造函數計算了指針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類是由字符串指針來實現的,所以有依賴關系。

查看完整回答
反對 回復 2022-01-03
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

String::String(const String& s)并不依賴String::String(const char* str),
理由是刪掉后者(類聲明和實現體),前者還能正常工作,所以沒有依賴

查看完整回答
反對 回復 2022-01-03
?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

感覺這里你的理解有點問題。
你的第二個構造函數時拷貝構造函數,是用于避免內部指針淺拷貝的。
它并不依賴第一個構造函數,你就覺得它依賴第一個構造函數,是因為你只有這個手段產生對象。如果你還有其余構造函數,它就更加不依賴了。
其余的構造函數是生成對象,這個構造函數是解決淺拷貝的指針懸掛問題的。

查看完整回答
反對 回復 2022-01-03
  • 3 回答
  • 0 關注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號