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

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

慕娘9325324
浏览 175回答 3
3回答

九州编程

是的String是类,而char *是变量类型就好比String是房屋,char *是砖头,房屋是砖头盖起来是,这是一个道理。构造函数的参数是引用String,也就是构造函数的参数是引用的对象的类是自己,而String类是由字符串指针来实现的,所以有依赖关系。

RISEBY

String::String(const String& s)并不依赖String::String(const char* str),理由是删掉后者(类声明和实现体),前者还能正常工作,所以没有依赖

慕仙森

感觉这里你的理解有点问题。你的第二个构造函数时拷贝构造函数,是用于避免内部指针浅拷贝的。它并不依赖第一个构造函数,你就觉得它依赖第一个构造函数,是因为你只有这个手段产生对象。如果你还有其余构造函数,它就更加不依赖了。其余的构造函数是生成对象,这个构造函数是解决浅拷贝的指针悬挂问题的。
打开App,查看更多内容
随时随地看视频慕课网APP