面向对象程序设计作业参考答案

更新时间:2024-06-30 12:16:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

习题一

5、分析下面程序运行的结果。 # using namespace std; int main() { cout<<”This”<<”is”;

cout<<”a”<<”C++”;

cout<<”program.”<

输出结果:ThisisaC++program.

6、分析下面程序运行的结果。 #include using namespace std; int main() { int a,b,c; a = 10; b = 23; c = a + b; cout<<'a + b =\ cout<

输出结果:a + b = 33

8、在你所用的C++系统上,输入以下程序,进行编译,观察编译情况,如果有错误,请修改程序,在进行编译,直到没有错误,然后进行连接和运行,分析运行结果。 修改后的程序如下: #include using namespace std; int main() { int a, b; a = b = 0; int c = a + b; cout<<”a + b =”<

9、输入以下程序,进行编译,观察编译情况,如果有错误,请修改程序,在进行编译,直到没有错误,然后进行连接和运行,分析运行结果。 修改后的程序如下: #include using namespace std; int add(int x,int y); int main() { int a = 0, b = 0; int c = add(a,b); cout<<\ return 0; }

int add(int x,int y) { int z = x + y; return z; }

习题二

1、请检查下面的程序,找出其中的错误(先不要上机,在纸面上作人工检查),并改正之。然后上机调试,使之能正常运行。运行时从键盘输入时、分、秒的值,检查输出是否正确。 改正以后的程序如下: #include using namespace std; class Time {

public: void set_time(void); void show_time(void); private: int hour; int minute; int sec; };

Time t; int main() { t.set_time(); t.show_time(); return 0; }

void Time::set_time(void) { cin>>hour; cin>>minute; cin>>sec; }

void Time::show_time(void) { cout<

参考程序如下: #include using namespace std; class Cuboid {

public: void SetValue() { for(int i = 0; i < 3;i++) { cin>>length[i]; cin>>width[i]; cin>>height[i]; } } void calArea() { for(int i = 0; i < 3;i++) { area[i] = length[i] * width[i] * height[i]; } } void showArea() { calArea(); for(int i = 0; i < 3;i++) { cout<<\长方柱\的面积为:\ } }

private: double length[3],width[3],height[3],area[3]; };

int main() { Cuboid c; c.SetValue(); c.showArea(); return 0; }

习题三

1、构造函数和析构函数的作用是什么?什么时候需要自己定义构造函数和析构函数? 答:

构造函数的作用:用来初始化对象。 析构函数的作用:在删除一个对象前被调用,释放该对象成员的内存空间,以及其它一些清理工作。 用户需要按照一定的需求去初始化对象时,需要定义构造函数。同理,释放对象时,用户需要按照一定的需求去释放内存或者其他清理工作,需要定义析构函数。

2、分析下面的程序,写出其运行时的输出结果。 #include using namespace std; class Date {

public: Date(int m,int d,int y):month(m),day(d),year(y){} Date(int m,int d):month(m),day(d){year = 2005;} Date(int m):month(m){day = 1;year = 2005;} Date(){month = 1;day = 1;year = 2005;} void display(){cout<

int main(){ Date d1(10,13,2005); Date d2(12,30); Date d3(10); Date d4; d1.display(); d2.display(); d3.display(); d4.display(); return 0; }

输出结果如下: 10/13/2005 12/30/2005 10/1/205 1/1/2005

3、题目略。

答:有问题,Date d2(12,30);这行代码具有二义性,可以调用第一个构造函数,也可以调用第四个构造函数。Date d3(10) 这行代码具有二义性,可以调用第一个构造函数,也可以调

用第三个构造函数。Date d4; 这行代码具有二义性,可以调用第一个构造函数,也可以调用第二个构造函数。解决的办法就是去掉第二、三和四个构造函数。

4、建立一个对象数组,内放5个学生的数据(学号、成绩),用指针指向数组首元素,输出第1,3,5个学生的数据。 程序代码如下: #include using namespace std;

class Student {

public: Student(int n,float s):num(n),score(s){} void display(){cout<

int main() { Student s[5] = {Student(1,91),Student(2,92),Student(3,93),Student(4,94),Student(5,95)}; Student *ps = s; ps->display(); ps++; ps++; ps->display(); ps++; ps++; ps->display(); return 0; }

6、阅读下面的程序,分析其执行结果,写出输入结果。 #include using namespace std;

class Student {

public: Student(int n,float s):num(n),score(s){} void change(int n ,float s){num = n; score = s;} void display(){cout<

int num; float score; };

int main() { Student stud(101,78.5); stud.display(); stud.change(101,80.5); stud.display(); return 0; }

输出结果如下: 101 78.5 101 80.5

7、将第6题得程序分别做如下修改,分析所修改部分的函数以及编译和运行的情况。 (1)将main函数第2行改为 const Student stud(101,78.5); 答:有错误,常对象只能调用常成员函数,而display和change函数都不是常成员函数。 (2)在(1)的基础上修改程序,是只能正常运行,用change函数修改数据成员num和score的值。

答:首先将change和display成员函数修改为常成员函数,然后将数据成员num和score修改为可变类型(在num和score的数据类型前加mutable)。 (3)将main函数改为 int main() { Student stud(101,78.5); Student *p = &stud; p->display(); p->change(101,80.5); p->display(); return 0; }

其他部分仍同第6题的程序。

(4)在(3)的基础上将main函数改为 const Student * p = &stud; 答:有错误。p指针是个常量指针,指向的是一个常对象,故而解决的办法同题(2)。 (5)在把main函数第3行改为 Student * const p = &stud; 答:没有错误。p指针是个指针常量,指向stud以后不能再指向其他对象。

习题四

1、定义一个复数类Complex,重载运算符“+”、“=”,“*”,“、”,使之能进行复数的加、减、乘、除。运算符重载函数作为Complex类得成员函数。编程序,分别求两个复数之和、差、积和商。

#include #include using namespace std; class Complex{ public:

Complex(double r=0,double i=0);

Complex operator +(const Complex& c); Complex operator -(const Complex& c); Complex operator *(const Complex& c); Complex operator /(const Complex& c); void print() const; private:

double real, imag; };

Complex::Complex(double r,double i){ real=r; imag=i; }

Complex Complex::operator +(const Complex& c){ double r=real+c.real; double i=imag+c.imag; return Complex(r,i); }

Complex Complex::operator -(const Complex& c){ double r=real-c.real; double i=imag-c.imag; return Complex(r,i); }

Complex Complex::operator *(const Complex& c){ double r=real * c.real - imag * c.imag; double i=real * c.imag + imag * c.real; return Complex(r,i); }

Complex Complex::operator /(const Complex& c){ double t = pow(c.imag,2) + pow(c.real,2); double r=real * c.real + imag * c.imag; double i=imag * c.real -real * c.imag; return Complex(r/t,i/t); }

void Complex::print() const{

cout<<'('<

int main() {

Complex a(3,2),b(0,3),c; c = a + b; c.print(); c = a - b; c.print(); c = a * b; c.print(); c = a / b; c.print(); return 0; }

习题五

7、有以下程序,请完成下面的工作: ① 阅读程序,写出运行时输出的结果。 #include using namespace std; class A{ public:

A(){a = 0; b = 0;}

A(int i){a = i; b = 0;}

A(int i, int j){a = i; b = j;}

void display(){cout<<\private: int a; int b; };

class B : public A {

public:

B(){c = 0;}

B(int i):A(i){c = 0;}

B(int i, int j):A(i,j){c = 0;}

B(int i, int j, int k):A(i,j){c = k;} void display1() {

display();

cout<<\ } private: int c; };

int main() {

B b1; B b2(1); B b3(1,3); B b4(1,3,5); b1.display1(); b2.display1(); b3.display1(); b4.display1(); return 0; }

输出结果如下: a=0 b=0 c=0 a=1 b=0 c=0 a=1 b=3 c=0 a=1 b=3 c=5

8、有以下程序,请完成下面的工作: ① 阅读程序,写出运行时输出的结果。 #include #include using namespace std; class A{ public:

A(){cout<<\ ~A(){cout<<\};

class B : public A {

public:

B(){cout<<\ ~B(){cout<<\};

class C : public B {

public:

C(){cout<<\ ~C(){cout<<\};

int main() {

C c1; return 0; }

输出结果如下: constrcting A constrcting B constrcting C destrcting C destrcting B destrcting A

习题六

4、写一个程序,定义抽象基类Shape,由它派生出3个派生类,Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上三只的面积,3个图形的数据在定义对象时给出。 代码如下:

#include using namespace std; ///基类Shape class Shape {

public:

void virtual printArea() = 0;//纯虚函数 };

//派生类Circle

class Circle : public Shape {

public:

Circle(double r = 0):radius(r){}//构造函数

void printArea(){cout<<3.14159 * radius * radius<

double radius;//数据成员,表示半径 };

//派生类Rectangle

class Rectangle : public Shape {

public:

Rectangle(double w,double h):width(w),height(h){}//构造函数 void printArea(){cout<

double width;//数据成员,表示宽

double height;//数据成员,表示长 };

//派生类Triangle

class Triangle : public Shape {

public:

Triangle(double w,double h):width(w),height(h){} //构造函数 void printArea(){cout<

double width;//数据成员,表示底

double height;//数据成员,表示高 };

//主函数 int main() {

Shape *s;

Circle circle(1.0);

Rectangle rectangle(1.0,1.0); Triangle triangle(1.0,1.0); s = &circle; s->printArea(); s = &rectangle; s->printArea(); s = ▵ s->printArea(); return 0; }

本文来源:https://www.bwwdw.com/article/6qu3.html

Top