重载加法运算符

#include<stdio.h>
#include<string.h>

class String{
        public:
                String(const char *str = NULL);
                char *m_data;
                char *addstr;
                String &operator + (const String *rhs);
};

String :: String(const char *str){      //定义构造函数
        if(str == NULL){
                m_data = new char[1];
                m_data[0] = ‘\0‘;
        }else{
                m_data = new char[strlen(str)+1];
                strcpy(m_data,str);
        }
}

String &String :: operator+(const String &rhs){         //重载加法运算
        addstr = new char[strlen(m_data)+strlen(rhs.m_data)+1;
        strcpy(addstr,m_data);
}

时间: 2024-11-27 23:13:22

重载加法运算符的相关文章

C++运算符重载——重载特殊运算符

1.重载赋值运算符= 赋值运算符用于同类对象间的相互赋值.赋值运算符只能被重载为类的非静态成员函数,不能重载为友元函数和普通函数. 对于用户自定义的类而言,如果没有重载赋值运算符,那么C++编译器会为该类提供一个默认的重载赋值运算符成员函数. 默认赋值运算符的工作方式是按位对拷,将等到右边对象的非静态成员拷贝给等号左边的对象. 重载赋值运算符函数必须是public的,否则会编译错误,因为用户定义了重载赋值运算符函数,编译器就不会提供默认的. 在类中重载的赋值运算符函数不能被继承! 通常情况下编译

C++ Primer 学习笔记_28_操作符重载与转换(3)--成员函数的重载、覆盖与隐藏、类型转换运算符、*运算符重载、-&gt;运算符重载

C++ Primer 学习笔记_28_操作符重载与转换(3)--成员函数的重载.覆盖与隐藏.类型转换运算符.*运算符重载.->运算符重载 一.成员函数的重载.覆盖与隐藏 对于类层次的同名成员函数来说,有三种关系:重载.覆盖和隐藏,理清3种关系,有助于写出高质量的代码. 1.成员函数的重载 重载的概念相对简单,只有在同一类定义中的同名成员函数才存在重载关系,主要特点时函数的参数类型和数目有所不同:但不能出现函数参数的个数和类型均相同,仅仅依靠返回值类型不同来区分的函数,这和普通函数的重载是完全一致

c++笔记--重载箭头运算符

箭头操作符(->)的通常用法是,使用一个类对象的指针来调用该指针所指对象的成员.左操作数为对象指针,右操作数为该对象的成员.定义重载箭头操作符之后看起来就有点特别,可以用类对象的指针来调用,也可以用类对象直接调用. 重载箭头操作符,首先重载箭头操作符必须定义为类成员函数. 箭头操作符可能看起来是二元操作符:接受一个对象和一个成员名,对对象解引用以获取成员.其实箭头操作符是一元操作符,没有显示形参(而且是类成员,唯一隐式形参是this).->的右操作数不是表达式,而是对应类成员的一个标识符,由编

C++重载加号运算符实现两个结构体的相加

#include<iostream> #include<string> using namespace std; struct S { int a, b; string str; S operator+(const S &others) { S s1; s1.a = this->a + others.a; s1.b = this->a + others.a; s1.str += this->str; s1.str += others.str; return

C++运算符重载——重载二元运算符

1.重载二元操作符的方法 二元运算符又称为双目运算符,即需要2个操作数的运算符,例如 + - * / 等. 运算符重载可以分为3种方式:类的非静态成员函数.类的友元函数.普通函数. 例如有 2 个操作数 a 和 b,二元运算符 ? (表示一个二元运算符),a ? b 的操作会被解释为下面2种形式之一 //a ? b a.operator?(b); //类的非静态成员函数 operator?(a, b); //友元函数 和 普通函数 第一种形式是运算符被重载为类的非静态成员函数, 这种方式要求运算

C++重载流运算符,将存储结构体的vector直接写入文件

我们知道,当vector很大的时候,如果使用循环的方式将其中的元素写入文件将非常费时,因此有没有办法将vector一次性写入文件呢? 采用流运算符重载的方法可以做到,不仅基本类型的vector可以一次性写入,存储struct的vector也是可以的,这里举一个简单的例子,声明结构体: struct point { double lat; //纬度 double lon; //经度 unsigned long long time; //时间 } 写一个类封装流运算符: class onepoint

JavaScript (+) 加法运算符

JavaScript加法运算符用加号(+)表示. 代码实例如下: var a = 1; var b = 2; console.log(a+b); 在处理特殊值时,加法也有一些特殊行为: (1).某个运算数是NaN,那么结果为NaN. (2).-Infinity加-Infinity,结果为-Infinity. (3).Infinity加-Infinity,结果为NaN. (4).+0加+0,结果为+0. (5).-0加+0,结果为+0. (6).-0加-0,结果为-0. +0和-0虽然它们在值上是

加法运算符重载为从成员函数执行过程

今天学习了运算符重载函数,测试了复数类加减运算符的重载,不明白运算符重载函数的执行过程,重点探究一下: 首先贴出源代码 // example_1_2_cl_dt_fushujiajian.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> using namespace std; class complex { public: complex(double r=0.0,double i=0.0){re

复数类重载加法、减法和乘法运算符

以下定义了一个复数类及其部分实现,现要求将类的构造函数以及运算符+.- 和 * 函数重载补充完整. 复数类定义: 在这里描述复数类定义.具体如下: class complex { public: complex(float r=0,float i=0); // 构造函数 complex operator+(const complex &op2) const; //重载运算符 + complex operator-(const complex &op2) const; //重载运算符 - c