用第三个构造函数。Date d4; 这行代码具有二义性,可以调用第一个构造函数,也可以调用第二个构造函数。解决的办法就是去掉第二、三和四个构造函数。
4、建立一个对象数组,内放5个学生的数据(学号、成绩),用指针指向数组首元素,输出第1,3,5个学生的数据。 程序代码如下: #include
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 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 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 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; } 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库面向对象程序设计作业参考答案(2)在线全文阅读。
相关推荐: