为了账号安全,请及时绑定邮箱和手机立即绑定

求助大佬,为什么两个构造函数会产生依赖关系呢?求解释!

求助大佬,为什么两个构造函数会产生依赖关系呢?求解释!

慕娘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 关注
  • 174 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号