您的位置:首页 > 编程语言 > C语言/C++

c++运算符重载

2015-08-24 16:48 435 查看
C++不允许把下标运算符函数作为外部函数来定义,它只能是非静态的成员函数。

注意操作符重载作为友元函数和成员函数的区别

// person.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

class MyShape {
protected:
int R_, G_, B_;

string colorToString() {
stringstream ss;
ss << R_ << " " << G_ << " " << B_;
return ss.str();
}
public:
void setColor(int R, int G, int B) {
R_ = R; G_ = G, B_ = B;
}
int getR() {
return R_;
}
int getG() {
return G_;
}
int getB() {
return B_;
}
virtual void Draw() = 0;
MyShape() {
R_ = 255; G_ = 255, B_ = 255;
}
};

class MyCircle : public MyShape{
private:
int x_, y_, radius_, _size;
MyCircle*mMyCircle;
public:
MyCircle(int x, int y, int radius) {
x_ = x;
y_ = y;
radius_ = radius;
mMyCircle = NULL;
}
MyCircle(int size) {
_size = size;
mMyCircle = new MyCircle[size];
}
MyCircle() {
x_ = y_ = 200;
radius_ = 100;
mMyCircle = NULL;
}

MyCircle(MyCircle& aCircle) {
x_ = aCircle.x_;
y_ = aCircle.y_;
radius_ = aCircle.radius_;
R_ = aCircle.getR();
G_ = aCircle.getG();
B_ = aCircle.getB();
mMyCircle = NULL;
}
~MyCircle()
{
if (mMyCircle != NULL)
delete[]mMyCircle;
}
void setCenter(int x, int y) {
x_ = x;
y_ = y;
}

void setRadius(int radius) {
radius_ = radius;
}
int getRadius() {
return radius_;
}

void Draw() {
}

//----在此处添加关系运算符  >、<、>=、<=、==、!=  的重载原型声明
friend bool operator>(const MyCircle &c1, const MyCircle &c2)//声明为友元函数
{
return c1.radius_ > c2.radius_;
}

bool operator<(const MyCircle &c1)
{
return this->radius_ < c1.radius_;
}
bool operator>=(const MyCircle &c1)
{
return this->radius_ >= c1.radius_;
}
bool operator<=(const MyCircle &c1)
{
return this->radius_ <= c1.radius_;
}
bool operator==(const MyCircle &c1)
{
return this->radius_ == c1.radius_;
}
bool operator!=(const MyCircle &c1)
{
return this->radius_ != c1.radius_;
}

MyCircle operator++()
{
radius_++;
return *this;
}
MyCircle operator++(int dummy)
{
MyCircle temp(*this);
radius_++;
return temp;
}
MyCircle& operator[](const int &index)//不允许声明为友元函数
{
return mMyCircle[index];
}

};

//----在此处添加关系运算符的重载定义

int _tmain(int argc, _TCHAR* argv[])
{
int r1, r2, r3 = 0;
cin >> r1 >> r2 >> r3;
MyCircle c1, c2, c3;
c1.setRadius(r1);
c2.setRadius(r2);
c3.setRadius(r3);
if (c1 > c2)
cout << 1 << endl;
if (c2 < c1)
cout << 5 << endl;

MyCircle aa(4);
for (int i = 0; i < 4; i++)
{
aa[i] = MyCircle(1, 2, i + 1);
cout << aa[i].getRadius();
}
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: