說明
繼續(xù)上面的內(nèi)容
要求:
- 按照數(shù)組下標(biāo)由小到大,數(shù)組下標(biāo)運算符按照次序分別返回圓心x坐標(biāo),圓心y坐標(biāo)蹈矮,圓的半徑长已。
- 下標(biāo)超出范圍畜眨,則返回帶符號整型數(shù)中最小的值
- 可以為MyCircle類添加數(shù)據(jù)域成員并且修改其函數(shù)成員。
注意以下幾個要點:
- 因為要重載方括號運算符术瓮,所以應(yīng)該返回函數(shù)的引用
-
int
的最小值獲取方法:numeric_limits<int>::min();
需要引用<limits>
庫
代碼
#include <iostream>
#include <string>
#include <sstream>
#include <limits>
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_;
int max_int;
public:
MyCircle(int x, int y, int radius) {
x_ = x;
y_ = y;
radius_ = radius;
max_int = numeric_limits<int>::min();
}
MyCircle() {
x_ = y_ = 200;
radius_ = 100;
max_int = numeric_limits<int>::min();
}
MyCircle(MyCircle& aCircle) {
x_ = aCircle.x_;
y_ = aCircle.y_;
radius_ = aCircle.radius_;
R_ = aCircle.getR();
G_ = aCircle.getG();
B_ = aCircle.getB();
max_int = numeric_limits<int>::min();
}
void setCenter(int x, int y) {
x_ = x;
y_ = y;
}
void setRadius(int radius) {
radius_ = radius;
}
void Draw() {
}
bool operator > (const MyCircle c2) const;
bool operator < (const MyCircle c2) const;
bool operator >=(const MyCircle c2)const;
bool operator <=(const MyCircle c2)const;
bool operator ==(const MyCircle c2)const;
bool operator !=(const MyCircle c2)const;
int& operator [] (int n);
//----在此處添加關(guān)系運算符 >康聂、<、>=胞四、<=恬汁、==、!= 的重載原型聲明
};
bool MyCircle::operator<(const MyCircle c2)const {
return radius_ < c2.radius_;
}
bool MyCircle::operator>(const MyCircle c2)const {
return radius_ > c2.radius_;
}
bool MyCircle::operator>=(const MyCircle c2)const {
return radius_ >= c2.radius_;
}
bool MyCircle::operator<=(const MyCircle c2)const {
return radius_ <= c2.radius_;
}
bool MyCircle::operator==(const MyCircle c2)const {
return radius_ == c2.radius_;
}
bool MyCircle::operator!=(const MyCircle c2)const {
return radius_ != c2.radius_;
}
int& MyCircle::operator[](int n) {
if (n>2||n<0)
{
return max_int;
}
else
{
switch (n)
{
case 0:return x_;
case 1:return y_;
case 2:return radius_;
}
}
}
//----在此處添加關(guān)系運算符的重載定義
int main() {
int x, y, r = 0;
cin >> x >> y >> r;
MyCircle c1(x, y, r);
MyCircle c2;
c2[2] = x;
for (int i = 0; i <= 3; i++) {
cout << c1[i] << endl;
cout << c2[i - 1] << endl;
}
return 0;
}