(根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 对运算符重载的函数有两种处理方式:(1)把运算符重载的函数作为类的成员函数:(2)运算符重载的函数不是类的成员函数,在类中把它声明为友元函数. 1    把运算符重载函数作为类的成员函数 在上一篇博客(http://www.cnblogs.com/hust-ghtao/p/3525522.html)中,运算符重载函数 operator + 就是属于这种形式…
首先,介绍三种重载方式: //作为成员函数重载(常见) class Person{ Private: string name; int age; public: Person(const char* name, int age):name(name),age(age){} bool operator<(const Person& b); }; bool Person::operator<(const Person& b) { //作为成员函数时,*this即为左操作数a ...…
运算符重载是C++多态的重要实现手段之一.通过运算符重载对运算符功能进行特殊定制,使其支持特定类型对象的运算,执行特定的功能,增强C++的扩展功能. 运算符重载的我们需要坚持四项基本原则: (1)不可臆造运算符: (2)运算符原有操作数的个数.优先级和结合性不能改变: (3)操作数中至少一个是自定义类型: (4)保持重载运算符的自然含义. 一般来说,C++运算符重载可采用成员函数和友元函数,二者都可以访问类的私有成员,那么该采用哪一种呢?首先看一下二者的区别. (1)当重载为成员函数时,会隐含一…
1,类和对象 定义一个类,本质上是定义一个数据类型的蓝图.这实际上并没有定义任何数据,但它定义了类的名称意味着什么,也就是说,它定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作. 类定义格式如下: class Box { public: //在类对象作用域内,公共成员在类的外部是可访问的. double length; // 盒子的长度 double breadth; // 盒子的宽度 double height; // 盒子的高度 }; 声明类对象: Box Box1; // 声明…
类成员函数: bool operator ==(const point &a)const { return x==a.x; } 友元函数: friend bool operator ==(const point &a,const point &b) { return a.x==b.x; } 两种重载方式的比较: (1)单目运算符.=.().[].->使用类成员函数,其它双目运算符使用友元函数 (2)类型转换函数只能定义为类成员函数 (3)运算会修改类成员是使用类成员函数 (4…
本来这篇博客是不打算写的,内容不是很难,对于我自己来讲,更多的是为了突出细节. 所谓template friend functions,就是使友元函数本身成为模板.基本步骤:1,在类定义的前面声明每个模板函数.eg:template <typename T> void counts(); template <typename T> void report<>(T &);2,在类声明中再次将模板声明为友元. template <typename TT>…
0. 使用背景 对于特定类类型的全体对象而言,访问一个全局对象有时是必要的.也许,在程序的任意点需要统计已创建的特定类类型对象的数量:或者,全局对象可能是指向类的错误处理例程的一个指针:或者,它是指向类类型对象的内在自由存储区的一个指针.然而,全局对象会破坏封装:对象需要支持特定类抽象的实现.如果对象是全局的,一般的用户代码就可以修改这个值. 1. static 类成员 类可以定义类 静态成员,而不是定义一个可普遍访问的全局对象.通常,非 static 数据成员存在于类类型的每个对象中.不像普通…
什么是函数指针 函数指针是指向函数的指针变量.也就是说,它是一个指针变量,而且该指针指向一个函数. 对于指针变量来说,它的值是它指向的变量的地址.举个例子:指针变量pi是指向一个整型变量i的指针,则变量i的地址 &i 就是指针变量pi的值.也就是说整型变量指针指向一个整型变量,而整型变量指针的值就是它所指的整型变量的地址.与其它类型指针变量一样,函数指针变量的值就是它指向的函数的地址. 那么什么是函数的地址呢? 我们首先来看函数调用是怎么回事.在程序运行时,一个函数占用一段连续的内存.当调用一个…
5.2.2 友元运算符重载函数 运算符重载函数一般采用两种形式定义: 一是定义为它将要操作的类的成员函数(简称运算符重载函数): 二是定义为类的友元函数(简称为友元运算符重载函数). 1.定义友元运算符重载函数的语法如下: 在类的内部: friend 函数类型 operator运算符(形参表) { 函数体 } 在类的内部声明,在类外定义: class X{ ... friend 函数类型 operator运算符(形参表): }; 函数类型 X::operator运算符(形参表) { 函数体 }…
一.前言 其实本人学习C++的目的,只是为了体会OOP设计思想,并为利用System Verilog验证复杂设计做准备.如果想要真正做点软件方面项目级的东西,还需要掌握其他高级语言和库.框架等知识.因此该系列博文仅注重语言基础和设计思想.上一篇该系列博文讲述了C++中基本的类封装,这次利用运算符重载友元函数来体会下C++的灵活性. 二.运算符重载友元函数  本文同样以<C++ Primer Plus>中的一个简单示例来讲解此内容.场景如下:时间粗劣地分为时和分两部分.需要完成两个时间的相加.时…