资源描述
4-8 定义一个Dog类,包含age,weight等属性,以及对这些属性操作的方法。实现并测试这个类。
#include <iostream>
using namespace std;
class Dog
{
public:
void setAge(int a)
{
age=a;
}
int getAge()
{
return age;
}
void setWeight(float w)
{
weight=w;
}
float getWeight()
{
return weight;
}
private:
int age;
float weight;
};
void main()
{
Dog d;
d.setAge(3);
d.setWeight(30);
cout<<"小狗:"<<d.getAge()<<"岁,重"<<d.getWeight()<<"斤。"<<endl;
}
4-9 设计并测试一个名为Rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,根据坐标能计算矩形的面积。
#include <iostream>
#include <math.h>
using namespace std;
class Rectangle
{
public:
Rectangle(int xx1,int yy1,int xx2,int yy2)
{
x1=xx1;
y1=yy1;
x2=xx2;
y2=yy2;
}
float getArea()
{
return fabs(x2-x1)*fabs(y2-y1);
}
private:
int x1,y1;
int x2,y2;
};
void main()
{
Rectangle rec(0,0,10,20);
cout<<"矩形面积:"<<rec.getArea()<<endl;
}
4-11 定义并实现一个矩形类,有长、宽两个属性,由成员函数计算矩形的面积。
#include <iostream>
using namespace std;
class Rectangle
{
public:
Rectangle(int l,int w)
{
length=l;
width=w;
}
float getArea()
{
return length*width;
}
private:
int length;
int width;
};
void main()
{
Rectangle rec(10,20);
cout<<"矩形面积:"<<rec.getArea()<<endl;
}
4-13 定义一个Circle类,有数据成员radius(半径),成员函数getArea(),计算圆的面积,构造一个Circle的对象进行测试。
#include <iostream>
using namespace std;
const float PI=3.1415;
class Circle
{
public:
Circle(float r)
{
radius=r;
}
float getArea()
{
return radius*PI*PI;
}
private:
float radius;
};
void main()
{
Circle c(5.5);
cout<<"圆的面积:"<<c.getArea()<<endl;
}
4-20 定义一个复数类Complex,使得下面的代码能够工作。
Complex c1(3,5);
Complex c2=4.5;
c1.add(c2);
c1.show() ;
//源程序如下:
#include <iostream>
using namespace std;
class Complex
{
public:
Complex(float r=0.0,float i=0.0)
{
real=r;
image=i;
}
void add(Complex b)
{
real=real+b.real;
image=image+b.image;
}
void show()
{
cout<<real<<"+"<<image<<"i"<<endl;
}
private:
float real; //实部
float image; //虚部
};
void main()
{
Complex c1(3,5);
Complex c2=4.5; //相当于Complex c2(4.5);
c1.add(c2);
c1.show();
}
5-7 定义一个Cat类,拥有静态数据成员numOfCats,记录Cat的个体数目;静态成员函数getNumOfCats(),读取numOfCats。设计程序测试这个类,体会静态数据成员和静态成员函数的用法。
#include <iostream>
using namespace std;
class Cat
{
public:
Cat()
{
numOfCats++;
}
~Cat()
{
numOfCats--;
}
static int getNumOfCats()
{
return numOfCats;
}
private:
static int numOfCats;
};
int Cat::numOfCats=0;
void main()
{
cout<<"现在的Cat数量:"<<Cat::getNumOfCats()<<endl;
Cat a;
cout<<"现在的Cat数量:"<<a.getNumOfCats()<<endl;
Cat b;
cout<<"现在的Cat数量:"<<b.getNumOfCats()<<endl;
}
5-14 定义Boat与Car两个类,二者都有weight属性,定义二者的一个友元函数getTotalWeight(),计算二者的重量和。
#include <iostream>
using namespace std;
class Car;
class Boat
{
public:
Boat(float w)
{
weight=w;
}
friend float getTotalWeight(Boat b,Car c);
private:
float weight;
};
class Car
{
public:
Car(float w)
{
weight=w;
}
friend float getTotalWeight(Boat b,Car c);
private:
float weight;
};
float getTotalWeight(Boat b,Car c)
{
return b.weight+c.weight;
}
void main()
{
Boat boat(3500);
Car car(1000);
cout<<"船和汽车共重"<<getTotalWeight(boat,car)<<"公斤。"<<endl;
}
7-5 定义一个基类Shape,在此基础上派生出Rectangle和Circle,二者都有getArea()函数计算对象的面积。使用Rectangle类创建一个派生类Square。
#include <iostream>
using namespace std;
const float PI=3.14;
class Shape
{
public:
Shape(float a,float b=0.0)
{
this->a=a;
this->b=b;
}
protected:
float a,b;
};
class Rectangle : public Shape
{
public:
Rectangle(float l,float w):Shape(l,w)
{
}
float getArea()
{
return a*b;
}
};
class Circle : public Shape
{
public:
Circle(float r):Shape(r)
{
}
float getArea()
{
return a*PI*PI;
}
};
class Square : public Rectangle
{
public:
Square(float l):Rectangle(l,l)
{
}
float getArea()
{
return a*a;
}
};
void main()
{
Rectangle r(10,20);
Circle c(5);
Square s(10);
cout<<"矩形的面积:"<<r.getArea()<<endl;
cout<<"圆的面积:"<<c.getArea()<<endl;
cout<<"正方形的面积:"<<s.getArea()<<endl;
}
7-6 定义一个哺乳动物类Mammal,再由此派生出狗类Dog,定义一个Dog类的对象,观察基类与派生类的构造函数和析构函数的调用顺序。
#include <iostream>
using namespace std;
class Mammal
{
public:
Mammal()
{
cout<<"Constructing Mammal."<<endl;
}
~Mammal()
{
cout<<"Desstructing Mammal."<<endl;
}
};
class Dog : public Mammal
{
public:
Dog()
{
cout<<"Constructing Dog."<<endl;
}
~Dog()
{
cout<<"Desstructing Dog."<<endl;
}
};
void main()
{
Dog d;
}
7-8 定义一个Document类,有数据成员name,从Document派生出Book类,增加数据成员pageCount。
#include <iostream>
using namespace std;
class Document
{
public:
Document(char * n)
{
strcpy(name,n);
}
void show()
{
cout<<name;
}
private:
char name[50];
};
class Book : public Document
{
public:
Book(char *n,int p):Document(n),pageCount(p)
{
}
void show()
{
cout<<"书名:";
Document::show();
cout<<endl<<"页数:"<<pageCount<<endl;
}
private:
int pageCount;
};
void main()
{
Book book("C++语言程序设计",529);
book.show();
}
7-10 定义一个Object类,有数据成员weight及相应的操作函数,由此派生出Box类,增加数据成员height和width及相应的操作函数,声明一个Box对象,观察构造函数与析构函数的调用顺序。
#include <iostream>
using namespace std;
class Object
{
public:
Object()
{
cout<<"Constructing Object."<<endl;
}
~Object()
{
cout<<"Destructing Object."<<endl;
}
void setWeight(int w)
{
weight=w;
}
int getWeight()
{
return weight;
}
private:
int weight;
};
class Box : public Object
{
public:
Box()
{
cout<<"Constructing Box."<<endl;
}
~Box()
{
cout<<"Destructing Box."<<endl;
}
void setHeight(int h)
{
height=h;
}
int getHeight()
{
return height;
}
void setWidth(int w)
{
width=w;
}
int getWidth()
{
return width;
}
private:
int height;
int width;
};
void main()
{
Box box;
box.setHeight(5);
box.setWidth(10);
box.setWeight(8);
cout<<"盒子:高"<<box.getHeight()<<",宽"<<box.getWidth()<<",重"<<box.getWeight()<<endl;
}
8-4
#include <iostream>
using namespace std;
class Counter
{
public:
Counter(int ii=0)
{
i=ii;
}
void print()
{
cout<<"i="<<i<<endl;
}
Counter operator +(int a)
{
Counter temp;
temp.i=i+a;
return temp;
}
private:
int i;
};
void main()
{
Counter c;
c=c+3;
c.print();
c=c+5;
c.print();
}
8-5
#include <iostream>
using namespace std;
class Mammal
{
public:
virtual void speak()
{
cout<<"Mammal Speak!"<<endl;
}
};
class Dog:public Mammal
{
public:
virtual void speak()
{
cout<<"Dog Speak!"<<endl;
}
};
void main()
{
Dog d;
d.speak();
Mammal *p=&d;
p->speak();
}
8-7
#include <iostream>
using namespace std;
class Point
{
public:
Point(int x=0,int y=0)
{
X=x;
Y=y;
}
void print()
{
cout<<"("<<X<<","<<Y<<")"<<endl;
}
Point& operator++()
{
X++;
Y++;
return *this;
}
Point operator++(int)
{
Point temp=*this;
X++;
Y++;
return temp;
}
private:
int X,Y;
};
void main()
{
Point p;
(++p).print();
(p++).print();
(++p).print();
}
展开阅读全文