`

运算符重载

    博客分类:
  • c++
 
阅读更多
这里面东西还挺多,先写点,以后慢慢补充吧
operator++(a); //++a
operator++(a,int);//a++,int是一个哑元常量值

Bird

#include<iostream>
using namespace std;

class Bird{
public:
	string s;
	static int i;
	int num;
public:
	Bird(string str);
	Bird(const Bird& bird);
};

const Bird& operator+(Bird& bird1,const Bird& bird2){
	bird1.num+=bird2.num;
	return bird1;
}
const Bird& operator-(Bird& bird1,const Bird& bird2){
	bird1.num-=bird2.num;
	return bird1;
}
const Bird& operator*(Bird& bird1,const Bird& bird2){
	bird1.num*=bird2.num;
	return bird1;
}
const Bird& operator/(Bird& bird1,const Bird& bird2){
	bird1.num/=bird2.num;
	return bird1;
}

class BirdHouse{
public:
	int num;
public:
	BirdHouse(Bird bird1,Bird *bird2,const Bird& bird3){cout << "constructor" << endl;}
	BirdHouse(const BirdHouse& birdHouse){cout << "bird house copy constructor!"<< endl;}
	const BirdHouse& operator=(const BirdHouse& bh){cout << "operator=" << endl;return bh;}
	const BirdHouse& operator+(const BirdHouse& bh){
		num+=bh.num;
		return *this;
	}
	const BirdHouse& operator-(const BirdHouse& bh){
		cout << "operator-" << endl;
		num-=bh.num;
		return *this;
	}
	const BirdHouse& operator*(const BirdHouse& bh){
		num*=bh.num;
		return *this;
	}
	const BirdHouse& operator/(const BirdHouse& bh){
		num/=bh.num;
		return *this;
	}
};

int Bird::i = 0;

Bird::Bird(string str):s(str)
{
}

Bird::Bird(const Bird& bird)
{
	cout << "bird copy constructor!" << endl;
}

ostream& operator<<(ostream& os,const Bird& bird)
{
	os << bird.s << " #" << bird.i << endl;
	return os;
}


int main()
{
	Bird bird("small");
	bird.num = 10;
	cout << bird << endl;
	Bird bird2(bird);
	bird2.num = 5;
	cout << bird2 << endl;
	Bird bird3("big");
	cout << "test bird house:" << endl;
	BirdHouse bh1(bird,&bird2,bird3);
	BirdHouse bh2(bh1);
	bh2 = bh1;
	cout << "test operator:" << endl;
	bird = bird-bird2;
	cout << bird.num << endl;
	bh1.num = 20;
	bh2.num = 30;
	bh1*bh2;
	cout << bh1.num << endl;
	cout << bh2.num << endl;
}



重载new,delete,一般不推荐
#include<iostream>
using namespace std;

class A{
public:
    void* operator new(size_t){ //must:void*,size_t
        cout << "new operator!" << endl;
    }
    void* operator new(size_t,string s){//attention
        cout << "operator new!" << s << endl;
    }
    void operator delete(void* l){
        cout << "delete operator!" << endl;
    }
};

class B{
public:
    void* operator new[](size_t){
        cout << "new arrar!" << endl;
    }

    void operator delete[](void *l){
        cout << "delete array!" << endl;
    }
};

int main()
{
    string str = "abc";
    A* a1 = new A;
    delete a1;
    A* a2 = new (str) A();//attention
    delete a2;
    B* b = new B[10];
    delete []b;//[] must before b
}


分享到:
评论

相关推荐

    详解C++编程中的单目运算符重载与双目运算符重载

    C++单目运算符重载 单目运算符只有一个操作数,如!a,-b,&c,*p,还有最常用的++i和–i等。重载单目运算符的方法与重载双目运算符的方法是类似的。但由于单目运算符只有一个操作数,因此运算符重载函数只有一个参数...

    实验7 多态性和运算符重载.doc

    "实验7 多态性和运算符重载" 多态性是指类族中具有相似功能的不同函数使用同一名称来实现,从而可以使用相同的调用方式来调用这些具有不同功能的同名函数。C++中的多态的实现形式包括函数重载、运算符重载、虚函数...

    运算符重载实例.

    运算符重载实例 在 C++ programming 语言中,运算符重载是指在类中重新定义运算符的行为,以便在类的对象之间进行运算。今天,我们将通过一个实例来了解如何在 C++ 中实现运算符重载。 在这个实例中,我们定义了一...

    C++程序设计 运算符重载实验(一)

    ### C++程序设计 运算符重载实验(一) #### 概述 在C++程序设计中,运算符重载是一项重要的特性,它允许程序员重新定义预定义运算符的行为,以便于创建更加自然和直观的接口。本实验旨在帮助学习者掌握如何在...

    复数类加减法运算符重载成员函数

    在C++编程语言中,运算符重载是赋予运算符新的功能或意义,使其能用于特定自定义数据类型的一种技术。本主题将深入探讨如何通过重载加减法运算符来实现复数类的成员函数。复数类是用于表示复数(包括实部和虚部)的...

    C++作业实验-运算符重载

    在C++编程语言中,运算符重载是一项关键特性,允许我们为自定义类型赋予特定的运算符行为。本实验“C++作业实验-运算符重载”旨在深入理解这一概念,通过Visual Studio 2010开发环境进行实践。在这个实验中,我们将...

    使用C++实现矩阵运算(运算符重载)

    本项目通过使用运算符重载技术实现了矩阵的基本运算,包括加法、减法、乘法等。下面将详细解释这个主题中的关键知识点。 首先,我们要理解C++中的运算符重载。运算符重载允许我们在不同的上下文中为同一个运算符...

    运算符重载的基本内容

    运算符重载是C++语言中的一项重要特性,它允许开发者为用户自定义的数据类型(如类)赋予标准运算符新的含义,使得这些运算符在处理这些特定类型时能够执行相应的操作。运算符重载的核心在于,通过创建与运算符关联...

    运算符重载(c++ 最会的重载100).rar

    在C++编程语言中,运算符重载是一种特殊的功能,允许程序员为已有的运算符赋予新的含义,以便在自定义类型上使用。这使得我们能够用熟悉的运算符符号来执行特定于类型的操作,增强了代码的可读性和简洁性。本文将...

    实验二 运算符重载的应用.doc

    实验二 运算符重载的应用.doc 本实验报告的主要内容是对运算符重载的应用,通过构造函数、引用、运算符重载的概念和使用方法的学习和掌握,为后续的面向对象程序设计打下基础。 一、实验目的 1. 进一步熟悉构造...

    运算符重载示例适用于新手

    运算符重载是C++语言中的一个重要特性,它允许我们为已有的运算符赋予新的含义,以便在自定义数据类型上使用。对于新手来说,理解并掌握运算符重载是进阶C++编程的关键步骤之一。这篇教程将深入探讨运算符重载的基本...

    C++运算符重载友元函数实例

    在C++编程语言中,运算符重载是允许我们为已存在的运算符赋予新的含义或功能的一种机制。这个实例将探讨如何通过成员函数和非成员函数两种方式来重载运算符,以及如何结合友元函数来实现特定的操作。首先,让我们...

    C++运算符重载 详细介绍PPT

    详细介绍 C++运算符重载 的PPT 文中部分内容: 下标运算符“[ ]”重载 C++把下标运算符[ ]看成一个双目运算符,其操作数为&lt;基本表达式&gt;和&lt;表达式&gt;,对应的运算符为operator[ ],必须重载为一个成员函数。对于下标...

    C++程序设计课件 ch10 运算符重载

    C++中的运算符重载是面向对象编程的一个重要特性,它允许程序员自定义某些运算符在类的对象上的操作方式。这意味着可以为新定义的数据类型赋予传统运算符的新含义,或者修改已存在数据类型的运算符含义。在本课程件...

    C++运算符重载课件PPT及实例

    在C++编程语言中,运算符重载是一个关键特性,它允许我们为已存在的运算符赋予新的含义,以便在自定义类型上使用。这使得我们可以按照与内置类型类似的方式操作自定义类对象,提高代码的可读性和简洁性。本课件主要...

    C++ 复数类的实现 运算符重载

    在C++编程语言中,复数类的实现是面向对象编程的一个重要概念,它允许我们创建自定义数据类型来表示复数,并通过运算符重载为这些类型提供友好的操作接口。运算符重载是C++的一个强大特性,使得我们可以为自定义类型...

    C++运算符重载和继承

    在C++编程中,运算符重载和继承是两个核心概念,它们极大地扩展了语言的能力,使得代码更加灵活且易于理解。本章我们将深入探讨这两个主题,并通过实际代码示例来阐述它们的工作原理。 首先,让我们关注“运算符...

    运算符重载和函数重载

    ### 运算符重载和函数重载 #### 概述 在面向对象编程中,重载是一种重要的机制,它允许我们为同一个名称定义多个不同的实现。这不仅可以提高代码的可读性和简洁性,还可以更好地封装行为。在C++中,重载主要分为两...

    复数运算符重载

    在C#编程语言中,运算符重载是一种特殊的技术,允许程序员为自定义类型赋予标准运算符的新含义。当我们创建一个表示复数的类时,为了使得复数的加法、减法、乘法和除法等操作直观易用,就需要重载相应的运算符。复数...

    实验六函数重载与运算符重载

    ### 实验六:函数重载与运算符重载 #### 实验目的 1. **掌握函数重载的方法**:理解并能够实现同一名称但参数不同的多个函数,以便根据不同的参数类型或数量调用相应的函数体。 2. **掌握运算符重载的方法**:学会...

Global site tag (gtag.js) - Google Analytics