5.
//第八章
//5.
#include<iostream>
using namespace std;
class Mammal
{
public:
virtual void speak(){cout<<"Don'tknow~"<<endl;}//virtual写一个就可以了,后面会直接引用
};
class Dog:public Mammal
{
public:
void speak(){cout<<"wangwangwang!"<<endl;}
};
int main()
{ Dog a1;
Mammal *p = &a1;
a1. speak();
p->speak();//有结果输出,且输出非基类的结果
return 0;
}
6.
//6.
/*
#include<iostream>
#include<math.h>
usingnamespacestd;
constdoublePI=3.1415926;
classShape
{
public:
virtualvoidgetArea()=0;
virtualvoidgetPerim()=0;
};
//圆
classcircle:publicShape
{
doubler;
public:
circle(doublei):r(i){}
voidgetArea()
{
cout<<"CirclegetArea:"<<r*r*PI<<endl;
}
voidgetPerim()
{
cout<<"CirclegetPerim:"<<2*r*PI<<endl;
}
};
classRetangle:publicShape
{
doublea,b,s;
public:
Retangle(doublex=0,doubley=0){
a=x;
b=y;
}
voidgetArea()
{
s=a*b;
cout<<"RetanglegetArea:"<<s<<endl;
}
voidgetPerim()
{
cout<<"RetanglegetPerim:"<<2*(a+b)<<endl;
}
};
intmain()
{
doubler,a,b;
cin>>r>>a>>b;
Shape *p;
circlec1(r);
p=&c1;
p->getArea();
p->getPerim();
Retanglec2(a,b);
p=&c2;
p->getArea();
p->getPerim();
return0;
}
*/
7.
//7.
/*
#include<iostream>
usingnamespacestd;
classPoint
{
intx,y;
public:
Point(inta,intb)//构造函数,调用成员函数对x,y作初始化
{x=a; y=b; }
voidshow(){cout<<"x:"<<x<<"y:"<<y<<endl;}
Pointoperator++();
Pointoperator--();
Pointoperator++(int);
Pointoperator--(int);
};
PointPoint::operator++()//前置
{
x++;
y++;
return*this;
}
PointPoint::operator--()
{
x--;
y--;
return*this;
}
//以下两个都可以
PointPoint::operator++(int)
{
//return++(*this);
Pointa=*this;
a=++(*this);
returna;
}
PointPoint::operator--(int)
{
//return--(*this);
Pointa=*this;
a=--(*this);
returna;
}
//以下这两个不正确,也不明白。
PointPoint::operator++(int)
{
x++;
y++;
return*this;
}
PointPoint::operator--(int)
{
x--;
y--;
return*this;
}
intmain()
{
inta,b;
cin>>a>>b;
Pointp(a,b);
p.show();
cout<<"Show++p: ";
(++p).show();
cout<<"Show--p: ";
(--p).show();
cout<<"Showp++: ";
(p++).show();
cout<<"Showp--: ";
(p--).show();
return0;
}
*/
#include "iostream" #include "iomanip" using namespace std; class Point { private: int x,y; public: Point(int i=0,int j=0); friend Point operator ++(Point ob); void print(); }; int main() { Point ob1(3,5),ob2; cout<<"ob1:"<<endl; ob1.print(); cout<<"++ob1:"<<endl; ob2=++ob1; ob2.print(); return 0; } Point::Point(int i,int j) { x=i; y=j; } void Point::print() { cout<<"(x,y)"<<setw(5)<<"("<<x<<","<<y<<")"<<endl; } Point operator ++(Point ob) { ob.x=++ob.x; ob.y=++ob.y;//对象访问私有数据成员,,不太明白 return ob; }