加号与等号运算符重载
{…
// 赋值函数
String & operate=(const String &other);
// 相加函数,如果没有friend修饰则只许有一个右侧参数
friend String operate+( const String &s1, const String &s2);
private:
char *m_data;
}
String operate+(const String &s1, const String &s2)
{
String temp;
delete temp.data; // temp.data是仅含‘\0’的字符串
temp.data = new char[strlen(s1.data) + strlen(s2.data) +1];
strcpy(temp.data, s1.data);
strcat(temp.data, s2.data);
return temp;
}
1 为什么返回temp的对象 ? 而不是temp的引用
String & String::operate=(const String &other)
{
if (this == &other)
return *this;
delete m_data;
m_data = new char[strlen(other.data)+1];
strcpy(m_data, other.data);
return *this; // 返回的是 *this的引用,无需拷贝过程
}
这个例子作为 1的参考,为什么+重载符需要重新定义一个临时变量temp,而=重载符却直接用类的m_data ?
2 为什么不释放掉new出来的动态内存 ?
3 对于一个类的其中的一个数据成员new,该怎么delete?delete后 那不是对类不是动态分配的成员delete了。书上讲的都是基础数据类型malloc的实例 ,对类中不是动态分配的成员该怎么办? 那不是 把类的所有成员都删了 ?
分数不是重点,希望大家一起探讨探讨 求解答。
相关推荐
重载运算符 计算运算符.cpp
翁恺教授视频《C++面向对象程序设计》源码
等号运算符重载
等号运算符重载 函数重载 c++代码 开发工具:VS2010
C++ 中重载和运算符重载加号实现矩阵相加实例代码
主要介绍了C++ 中重载和运算符重载加号实现矩阵相加实例代码的相关资料,需要的朋友可以参考下
详解C++编程中的单目运算符重载与双目运算符重载
C++单目运算符重载 单目运算符只有一个操作数,如!a,-b,&c,*p,还有最常用的++i和–i等。重载单目运算符的方法与重载双目运算符的方法是类似的。但由于单目运算符只有一个操作数,因此运算符重载函数只有一个参数,如果运算符重载函数作为成员函数,则还可省略此参数。 下面以自增运算符”++“为例,介绍单目运算符的重载。 [例] 有一个Time类,包含数据成员minute(分)和sec(秒),模拟秒表,每次走一秒,满60秒进一分钟,此时秒又从0开始算。要求输出分和秒的值。 #include <iostream> using namespace std; class Time { publ
详解C++ 重载运算符和重载函数
C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。 当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。 C++ 中的函数重载 在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。您不能仅通过返回类型的不同来重载函数。 下面的实例中,同名函数 print() 被


