C++语言程序设计(第四版 郑莉)第八章部分题解

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; }

猜你喜欢

转载自blog.csdn.net/klftespace/article/details/80800684