把学校课程网站上的C++作业做了个总结,方便以后的复习。
1-1.教材习题4_13:定义Circle类并计算面积
【问题描述】
定义一个Circle类,有数据成员radius(半径),成员函数getArea()计算圆的面积。构造一个Circle的对象进行测试(注:圆周率取值3.14)。
【输入形式】
程序参考的输入(提示“Input Radius:”):
Input Radius:10
【输出形式】
程序参考的输出:
Area:314
【样例输入】
Input Radius:10
【样例输出】
Area:314
#include
#define Pi 3.14
using namespace std;
class Circle {
public:
float getArea();
private:
double radius;
};
float Circle::getArea() {
cout << "Input Radius:";
cin >> radius;
return Pi * radius * radius;
}
int main()
{
Circle radius;
float area = radius.getArea();
cout << "Area:" << area << endl;
}
1-2.教材习题4_8:定义Dog类,包含age和weight信息
【问题描述】
定义一个Dog类,包含age,weight等属性,以及对这些属性操作的方法。实现并测试这个类。
【输入形式】
程序参考的输入(提示“Input Age and Weight:”):
Input Age and Weight:3 20
【输出形式】
程序参考的输出:
Dog Age:3 years
Dog Weight:20kg
#include
#define Pi 3.14
using namespace std;
class Dog
{
public:
void setdog();
void showdog();
private:
int age;
int weight;
};
void Dog::setdog()
{
cout << "Input Age and Weight:";
cin >> age >> weight;
}
void Dog::showdog()
{
cout<<"Dog Age:"<
2-1.教材习题4_9:通过屏幕两点确定矩形类Rectangle
【问题描述】
设计并测试一个名为Rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,根据坐标能计算矩形的面积。
【输入形式】
程序参考的输入(提示“Input Point A:”输入左下角的坐标;提示“Input Point B:”输入左下角的坐标):
Input Point A:0 0
Input Point B:8.2 4.5
【输出形式】
程序参考的输出:
Rectangle Area:36.9
【样例输入】
Input Point A:0 0
Input Point B:8.2 4.5
【样例输出】
Rectangle Area:36.9
#include
using namespace std;
class Rectangle {
public:
void getPoint();
float getArea();
private:
double x1;
double x2;
double y1;
double y2;
double Area;
};
void Rectangle::getPoint() {
cout << "Input Point A:";
cin >> x1 >> y1;
cout << "Input Point B:";
cin >> x2 >> y2;
}
float Rectangle::getArea(){
Area=(x1-x2)*(y1-y2);
if(Area<0){
Area=-Area;
}
return Area;
}
int main()
{
Rectangle a;
a.getPoint();
float area = a.getArea();
cout << "Rectangle Area:" << area << endl;
return 0;
}
2-2.教材习题4_20:定义满足要求的复数类Complex类
【问题描述】
定义一个复数类Complex,使得下面的代码能够工作。(注:下列代码需放在主函数中。)
Complex c1(3,5); //用复数3+5i初始化c1
Complex c2=4.5; //用实数4.5初始化c2
c1.add(c2); //将c1与c2相加,结果保存在c1中
c1.show(); //将c1输出(这时的结果应该是7.5+5i)
【输入形式】
无
【输出形式】
7.5+5i
#include
using namespace std;
class Complex
{
private:
double real;
double imag;
public:
Complex(){real=0;imag=0;}
Complex(double r){real=r;imag=0;};
Complex(double r,double i){real=r;imag=i;};
void add(Complex c1){real += c1.real;imag += c1.imag;};
void show();
};
void Complex::show()
{
cout<0)cout<<"+"<
3-1.使用Visual C++ 6.0或CodeBlocks集成环境来编辑编译并运行程序
【问题描述】
使用Visual C++ 6.0或CodeBlocks集成环境来编辑、编译并运行程序:
【输入形式】
无
【输出形式】
constructor.
3,4
x+y=7
constructor.
30,40
x+y=70
destructor.
30,40
destructor.
3,4
#include
using namespace std;
class TAdd
{
public:
TAdd(int a,int b)
{
x=a;y=b;
cout<<"constructor."<
3-2.完成函数实现日期类Date
【问题描述】
定义日期类Date。要求:
(1)可以设置日期;
(2)日期加一天操作;
(3)输出函数,输出格式为“XXXX-XX-XX”;
(4)编写主函数,定义对象,完成相应功能。
【输入形式】
程序的参考的输入(“Input Date:”为提示文字):
Input Date:2016 2 28
【输出形式】
程序的输出:
2016-2-28
2016-2-29
【样例输入】
Input Date:2016 2 28
【样例输出】
2016-2-28
2016-2-29
#include
using namespace std;
class Date
{
public:
Date()
{
cout<<"Input Date:";
cin>>y>>m>>d;
}
int beLeapYear()
{
return ((y%4==0&&y%100!=0)||(y%400==0));
}
void addOneDay()
{
d++;
switch(m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
{
if(d > 31)
{
d -= 31;
m=1;
y++;
}
break;
}
case 4:
case 6:
case 9:
case 11:
{
if(d > 30)
{
d-= 30;
m++;
}
break;
}
case 2:
{
if(beLeapYear())
{
if(d > 29)
{
d -= 29;
m++;
}
}
else
{
if(d > 28)
{
d -= 28;
m++;
}
}
break;
}
default:
{
break;
}
}
}
void showDate()
{
cout<
4-1.教材习题5_3:全局变量与局部变量
【问题描述】
下面程序的运行结果是什么?实际运行一下,看看与你的设想有何不同。
注:只需调试一下代码即可,原样输入。
#include
using namespace std;
int x=5,y=7;
void myFunction(){
int y=10;
cout<<"x from myFunction:"<
4-2.教材习题5_7:利用静态变量统计小猫Cat的数量
【问题描述】
定义一个Cat类,拥有静态数据成员numOfCats,记录Cat的个体数目;静态成员函数getNumOfCats(),读取numOfCats。设计程序测试这个类,体会静态数据成员和静态成员函数的用法。
主函数如下:
int main()
{
Cat c;
cout<<"Num:"<
参考的输出结果为:
Num:1
Num:5
【输入形式】
无
【输出形式】
Num:1
Num:5
#include
using namespace std;
class Cat
{
public:
Cat()
{
numOfCats++;
}
~Cat()
{
numOfCats--;
}
static int getNumOfCats()
{
return numOfCats;
}
private:
static int numOfCats;
};
int Cat::numOfCats = 0;
int main()
{
Cat c;
cout<<"Num:"<
5-1.教材习题5_14:定义Boat与Car两个类,友元计算总重量
【问题描述】
定义Boat与Car两个类,二者都有weight属性,定义二者的一个友元函数getTotalWeight(),计算二者的重量和。
【输入形式】
参考的输入(数字前为提示文字):
Input boat weight:3
Input car weight:5
【输出形式】
参考的输出:
Total weight:8
【样例输入】
Input boat weight:3
Input car weight:5
【样例输出】
Total weight:8
#include
using namespace std;
class car;
class boat{
private:
int weight;
public:
boat();
friend int gettotalweight(boat &b,car &c);
};
boat::boat(){
cout <<"Input boat weight:";
cin>>weight;
}
class car{
private:
int weight;
public:
car();
friend int gettotalweight(boat &b,car &c);
};
car::car(){
cout <<"Input car weight:";
cin>>weight;
}
int gettotalweight(boat &b,car &c){
return b.weight+c.weight;
}
int main(){
boat b;
car c;
cout<<"Total weight:"<
5-2.教材习题5_13:定义类X,Y,Z,按要求实现友元
【问题描述】
定义类X,Y,Z,函数h(X*),满足:类X有私有成员i,Y的成员函数g(X*)是X的友元函数,实现对X的成员i加1;类Z是类X的友元类,其成员函数f(X*)实现对X的成员i加5;函数h(X*)是X的友元函数,实现对X的成员i加10。主函数实现测试。主函数需要定义如下:
int main()
{
int a;
cin>>a;
X x(a);
Y y;
Z z;
y.g(x);
z.f(x);
h(x);
x.print();
}
【输入形式】
参考的输入:
3
【输出形式】
参考的输出:
19
【样例输入】
3
【样例输出】
19
#include
using namespace std;
class X;
class Y
{
public:
void g(X &x);
};
class Z
{
public:
void f(X &x);
};
class X
{
public:
X(int i):i(i) {}
friend void Y::g(X &x);
friend class Z;
friend void h(X &x);
void print()
{
cout<>a;
X x(a);
Y y;
Z z;
y.g(x);
z.f(x);
h(x);
x.print();
}
6-1.利用对象数组,计算10个顶点组成折线的长度
【问题描述】
假设有一个点类point,具有两个实数坐标。希望主程序使用这个类完成下述功能:
(l)主程序为类point定义10个点的对象数组(也可以动态申请空间)。
(2)要求调用一个函数Set()从键盘输入10个对象的属性。
(3)要求调用一个函数Display()显示10个对象的值。
(4)要求调用一个函数Lenth(),计算将这些点连成一条折线时,这条折线的长度。
【输入形式】
参考的输入(每个点要求提示“Input x,y:”):
Input x,y:0 0
Input x,y:3 5
Input x,y:2 4
Input x,y:9 8
Input x,y:2 3
Input x,y:8 9
Input x,y:7 6
Input x,y:2 9
Input x,y:5 8
Input x,y:6 6
【输出形式】
参考的输出:
(0,0)
(3,5)
(2,4)
(9,8)
(2,3)
(8,9)
(7,6)
(2,9)
(5,8)
(6,6)
Length:46.7866
#include
#include
using namespace std;
#define MAX 10
#define col 0
class CPoint
{
private:
int array[MAX][2];
float DisAB;
float sum;
public:
void CSetPoint();
void Display();
void Lenth();
float PowerX_X(int i);
float PowerY_Y(int i);
float Twodist();
};
void CPoint::CSetPoint()
{
//cause this is a point,so the col is 2,and i made the default value is 0
for(int i=0; i> array[i][col]
>>array[i][col+1]; //Store the two values of input
}
}
void CPoint::Display() //display the point that your input
{
for(int i=0; i
6-2.定义Employee类,输出编号和姓名
【问题描述】
定义一个Employee类,在Employee类中增加一个数据(静态数据成员)来设置本公司员工编号基数,新增加的员工编号将在创建对象的同时自动在基数上增加(程序输入2个人员)。
【输入形式】
参考的输入如下(提示“Input name:”):
Input name:zhangsan
Input name:lisi
【输出形式】
参考的输出如下:
ID:1001 Name:zhangsan
ID:1002 Name:lisi
#include
#include
using namespace std;
class Employee
{
public:
Employee();
void display();
private:
static int base_id;
int id;
string name;
};
int Employee::base_id=0;
Employee::Employee(){
base_id++;
id=1000+base_id;
cout<<"Input name:";
cin>>name;
}
void Employee::display(){
cout<<"ID:"<
7-1.教材习题7_5:Shape类派生Rectangle和Circle类
【问题描述】
定义一个基类Shape,在此基础上派生出Rectangle和Circle,二者都有getArea()函数计算对象面积。使用Rectangle类创建一个派生类Square。
注:圆周率取3.14
【输入形式】
参考的输入(数字前面的文字为提示):
Input a,b:5 10
Input r:10
【输出形式】
参考的输出:
Rectangle Area:50,Circle Area:314
#include
#include
#define PAI 3.14
using namespace std;
class Shape{
public:
int getarea();
};
class Rectangle:public Shape{
public:
void setab();
void getab(){
cout<<"Input a,b:";
cin>>a>>b;
}
int getarea(){
return a*b;
}
private:
int a;
int b;
};
class Circle:public Shape{
public:
void setr();
void getr(){
cout<<"Input r:";
cin>>r;
}
float getarea(){
return r*r*PAI;
}
private:
int r;
};
class Square:public Rectangle{
public:
void setside();
void getside();
int getarea();
private:
int side;
};
int main(){
Rectangle a;
Circle b;
a.getab();
b.getr();
cout<<"Rectangle Area:"<
7-2.教材习题7_6:哺乳动物类Mammal派生出狗类Dog
【问题描述】
定义一个哺乳动物类Mammal,再由此派生出狗类Dog,定义一个Dog类的对象,观察基类与派生类的构造函数和析构函数的调用顺序。
【输入形式】
参考的输入为("Input Dog Name:"为提示文字):
Input Dog Name:wangcai
【输出形式】
参考的输出为:
Con.Mammal
Con.Dog:wangcai
Des.Dog:wangcai
Des.Mammal
#include
#include
using namespace std;
class Mammal
{
public:
Mammal(string name):name(name)
{
cout<<"Con.Mammal"<>name;
Dog d(name);
return 0;
}
7-3.教材习题6_20:实现一个简单圆类
【问题描述】
实现一个名为SimpleCircle的简单圆类。其数据成员int *itsRadius为一个指向其半径值的指针,存放其半径值。设计对数据成员的各种操作并计算面积,给出这个类的完整实现并测试这个类。
注:简单计算半径为10的圆面积,不需要输入,圆周率取3.14。
【输入形式】
无
【输出形式】
Area:314
#include
using namespace std;
const float pi=3.14;
class SimpleCircle
{
public:
SimpleCircle(float Radius = 0)
{
itsRadius = new float(Radius);
}
void setRadius(float r)
{
*itsRadius=r;
}
float getRadius()
{
return *itsRadius;
}
float getArea()
{
return (*itsRadius)*(*itsRadius)*pi;
}
private:
float *itsRadius;
};
int main()
{
SimpleCircle c;
c.setRadius(10);
cout<<"Area:"<
8-1.教材习题7_8:定义一个Document类和Book类
【问题描述】
定义一个Document类,有数据成员name,从Document派生出Book类,增加数据成员pageCount。
【输入形式】
程序参考的输入(数据前面文字为提示):
Input Name and Page:Math 280
【输出形式】
程序参考的输出:
Name:Math
Page:280
#include
#include
using namespace std;
class Document{
public:
Document(){};
Document(const char *name);
char *Name;
void PrintNameOf();
};
Document::Document(const char *name){
Name=new char[strlen(name)+1];
strcpy(Name,name);
};
void Document::PrintNameOf(){
cout<>Name>>PageCount;
}
void Book::PrintNameOf(){
cout<<"Name:";
Document::PrintNameOf();
}
void Book::PrintPage(){
cout<<"Page:"<
8-2.教材习题7_10:定义一个Object类和Box类
【问题描述】
定义一个Object类,有数据成员weight及相应的操作函数,由此派生出Box类,增加数据成员height和width及相应的操作函数,声明一个Box对象,观察构造函数和析构函数的调用顺序。
【输入输出形式】
参考的输入及输出(其中Input开头的两段文字为输入提示和输入数据,其他均为输出):
Constructing Object!
Constructing Box!
Input weight:50
Input height and width:20 30
Weight:50
Height and width:20,30
Destructing Box!
Destructing Object!
#include
#include
using namespace std;
class Object
{
public:
Object()
{
cout<<"Constructing Object!"<>weight;
}
void showInfo()
{
cout<<"Weight:"<>height>>width;
}
void showInfo()
{
Object::showInfo();
cout<<"Height and width:"<
9-1.教材习题7_13:编写程序输出各个类各自的地址
【问题描述】
思考例7-6和例7-8中Derived类的各个数据成员在Derived对象中存放的位置,编写程序输出它们各自的地址来验证自己的判断。
录入下面的代码,自行分析输出结果。
//7_8.cpp
#include
using namespace std;
class Base0 { //定义基类Base0
public:
int var0;
void fun0() { cout << "Member of Base0" << endl; }
};
class Base1: virtual public Base0 { //定义派生类Base1
public: //新增外部接口
int var1;
};
class Base2: virtual public Base0 { //定义派生类Base2
public: //新增外部接口
int var2;
};
class Derived: public Base1, public Base2 { //定义派生类Derived
public: //新增外部接口
int var;
void fun() { cout << "Member of Derived" << endl; }
};
int main() { //程序主函数
Derived d; //定义Derived类对象d
d.var0 = 2; //直接访问虚基类的数据成员
d.fun0(); //直接访问虚基类的函数成员
if(&d.Base1::var0==&d.Base2::var0)
cout<<"true"<
9-2.教材习题7_15:下面的程序能得到预期的结果吗?
【问题描述】
下面的程序能得到预期的结果吗?如何避免类似问题的发生?
请修改程序,使它得到我们想要的结果。即希望两个输出的值相同。
提示:struct在C++中也可以用来定义类,它与class的不同在于struct定义的类成员的默认访问权限是public。
#include
using namespace std;
struct Base1 {int x;};
struct Base2 {float y;};
struct Derived : Base1,Base2{};
int main()
{
Derived *pd=new Derived;
pd->x=1;pd->y=2.0f;
void *pv = pd;
Base2 *pb=static_cast
cout<
return 0;
}
【输入形式】
无
【输出形式】
2 2
#include
using namespace std;
struct Base1 {int x;};
struct Base2 {float y;}
struct Derived : Base1,Base2{};
int main()
{
Derived *pd=new Derived;
pd->x=1;pd->y=2.0f;
Derived *pv = pd;
Base2 *pb=static_cast(pv);
cout<y<<" "<y<
9-3.教材习题7_11:基类BaseClass派生出类DerivedClass
【问题描述】
定义一个基类BaseClass,从它派生出类DerivedClass。BaseClass有成员函数fn1(),fn2(),DerivedClass也有成员函数fn1(),fn2()。在主函数中声明一个DerivedClass的对象,分别用DerivedClass的对象以及BaseClass和DerivedClass的指针来调用fn1(),fn2(),观察运行结果。
主函数如下:
int main()
{
DerivedClass dc;
BaseClass *pb = &dc;
DerivedClass *pd = &dc;
dc.fn1();
dc.fn2();
pb->fn1();
pb->fn2();
pd->fn1();
pd->fn2();
}
【输入形式】
无
【输出形式】
程序的输出结果为:
DerivedClass:fn1()
DerivedClass:fn2()
BaseClass:fn1()
BaseClass:fn2()
DerivedClass:fn1()
DerivedClass:fn2()
#include
using namespace std;
class BaseClass{
public:
void fn1(){
cout<<"BaseClass:fn1()"<fn1();
pb->fn2();
pd->fn1();
pd->fn2();
}
10-1.录入程序分析结果
【问题描述】
输入以下程序,分析运行结果
#include
using namespace std;
class B1
{
public:
B1(int i)
{
b1 = i;
cout<<"Constructing B1."<
【输入形式】
无
【输出形式】
Constructing B2.2
Constructing B1.1
Constructing B3.3
Constructing A.4
1
2
4
10-2.修改下面的4个类,添加析构函数
【问题描述】
修改下面的4个类,添加析构函数,在析构函数中输出各私有数据成员的值。并分析结果。
修改后程序的输出结果为:
Constructing B2.2
Constructing B1.1
Constructing B3.3
Constructing A.4
1
2
4
Destructing A.4
Destructing B3.3
Destructing B1.1
Destructing B2.2
待修改的程序源代码如下:
#include
using namespace std;
class B1
{
public:
B1(int i)
{
b1 = i;
cout<<"Constructing B1."<
#include
using namespace std;
class B1
{
public:
B1(int i)
{
b1 = i;
cout<<"Constructing B1."<
10-3.定义一个员工类、经理类、销售员类和销售经理类
【问题描述】
定义一个员工类Employee,有数据成员姓名,编号。定义一个销售员继承自员工类Sales,工资为销售额的提成10%,定义一个经理类Manager,固定工资8000,定义一个销售经理类,继承自销售员类和经理类,工资为固定工资5000加销售额的提成5%。每个类均有display()函数输出信息,编写主函数测试。主函数中定义一个销售经理对象,销售额为100000,输出信息。
【输入形式】
程序参考的输入(第一行为提示文字):
Input id name and sale:
M001 zhangsan 100000
【输出形式】
程序参考的输出结果如下:
ID:M001
Name:zhangsan
Salary:10000
#include
using namespace std;
class Employee
{
public:
Employee(string id,string name):id(id),name(name)
{}
void display()
{
cout<<"ID:"<>id>>name>>sale;
if(sale<0)
{
cout<<"Input Error!"<