#include<iostream>
using namespace std;
class Counter {
friend Counter& operator +(const Counter& a, const Counter& b);
int num;
public:
Counter() { num = 0; }
Counter(int num_) :num(num_){}
//Counter operator +(const Counter& a)
//{
// Counter res;
// res.num = num += a.num;
// return res;
//}
int display()
{
return num;
}
};
Counter& operator +(const Counter& a,const Counter& b)
{
Counter* res = new Counter;
res->num = a.num + b.num;
return *res;
}
void test()
{
Counter a(5);
Counter b(4);
Counter c = a + b;
Counter d = c + a + b;
cout << "c的值是:" << c.display() << " d的值是:" << d.display() << endl;
}
int main()
{
test();
return 0;
}
8-5
class Mammal {
public:
virtual void speak()
{
cout << "哺乳动物说话。。。" << endl;
}
};
class Dog :public Mammal {
public:
void speak()
{
cout << "狗狗说话。。。" << endl;
}
};
int main()
{
Dog a;
a.speak();
return 0;
}
8-6
class Shape {
public:
virtual double getarea()
{
return 0;
}
virtual double getperim() {
return 0;
}
};
class Rectangle :public Shape {
public:
Rectangle(double c, double d) :a(c), b(d) {}
double getarea()
{
return a * b;
}
double getperim() {
return 2 * (a + b);
}
private:
double a;
double b;
};
class Circle :public Shape {
public:
Circle(double a) :r(a) {}
double getarea()
{
return 3.14 * r * r;
}
double getperim() {
return 2 * 3.14 * r;
}
private:
double r;
};
void test02() {
Rectangle a1(5, 4);
Circle a2(5);
cout << a1.getarea() << endl;
cout << a2.getarea() << endl;
cout << a1.getperim() << endl;
cout << a2.getperim() << endl;
}
int main()
{
test02();
return 0;
}
8-7
class Point {
friend void test();
double x;
double y;
public:
Point(){}
Point(double a, double b) :x(a), y(b) {}
Point& operator ++ () {
x++;
y++;
return *this;
}
Point operator ++(int) {
Point tmp;
tmp.x = x;
tmp.y = y;
x++;
y++;
return tmp;
}
};
void test()
{
Point a(5, 6);
++(++a);
cout << a.x << "," << a.y << endl;
cout << (a++).x << endl;
cout << a.x << endl;
}
int main()
{
test();
return 0;
}