面向对象程序设计与VC实践习题答案

收藏

编号:168963159    类型:共享资源    大小:1.30MB    格式:PPT    上传时间:2022-11-13
10
积分
关 键 词:
面向 对象 程序设计 VC 实践 习题 答案
资源描述:
面向对象程序设计习题面向对象程序设计习题 优秀精品课件文档资料优秀精品课件文档资料面向对象程序设计习题面向对象程序设计习题 习习 题题 2 2-1-4:比较值调用和引用调用?:比较值调用和引用调用?值调用是指发生函数调用时,给形参分配内存空间,并直接值调用是指发生函数调用时,给形参分配内存空间,并直接将实参的值传递给形参。这一过程是参数的单向传递过程,将实参的值传递给形参。这一过程是参数的单向传递过程,一旦形参获得了值便与实参脱离关系,此后无论形参发生一旦形参获得了值便与实参脱离关系,此后无论形参发生了怎样的改变,都不会影响到实参。了怎样的改变,都不会影响到实参。引用调用不为形参分配内存,在执行主调函数中的调用语句引用调用不为形参分配内存,在执行主调函数中的调用语句时,系统自动用实参来初始化形参。形参是实参的一个别时,系统自动用实参来初始化形参。形参是实参的一个别名,对形参的任何操作也就直接作用于实参。名,对形参的任何操作也就直接作用于实参。传址是把实参的地址传给形参,从而形参和实参同占一个内传址是把实参的地址传给形参,从而形参和实参同占一个内存空间,所以形参变实参也变存空间,所以形参变实参也变;传值是实参把值赋值给形传值是实参把值赋值给形参,两个参数占有不同的地址,所以实参不随形参变化而参,两个参数占有不同的地址,所以实参不随形参变化而变化变化!面向对象程序设计习题面向对象程序设计习题 (7)编写程序,打印如下的杨辉三角形:编写程序,打印如下的杨辉三角形:1 1 1 1 2 1 1 3 3 1 1 4 6 4 1#include#include /#include void main()int i,j,a55=1;/第一行第一列赋值第一行第一列赋值1,其他为,其他为0 for(i=1;i5;i+)ai0=1;/第一列全置为第一列全置为1 for(j=1;j=i;j+)aij=ai-1j-1+ai-1j;/每个数是上面两数之和每个数是上面两数之和 for(i=0;i5;i+)/输出杨辉三角输出杨辉三角 coutsetw(5-i);/for(j=0;j5-i;j+)printf();for(j=0;j=i;j+)/只输出只输出a55的下三角的下三角 coutsetw(2)aij;/printf(%2d,aij);coutendl;方法一方法一1000011000121001331014641面向对象程序设计习题面向对象程序设计习题#include#include /#include void main()int i,j,a55;for(i=0;i5;i+)ai0=1;aii=1;/第一列、对角全置为第一列、对角全置为1 for(j=1;ji;j+)aij=ai-1j-1+ai-1j;/每个数是上面两数之和每个数是上面两数之和 for(i=0;i5;i+)/输出杨辉三角输出杨辉三角 coutsetw(5-i);/for(j=0;j5-i;j+)printf();for(j=0;j=i;j+)/只输出只输出a55的下三角的下三角 coutsetw(2)aij;/printf(%2d,aij);coutendl;方法一变形方法一变形111121133114641面向对象程序设计习题面向对象程序设计习题#include void main()int a59,i,j;for(i=0;i5;i+)for(j=0;j9;j+)aij=0;/所有元素赋值所有元素赋值0for(i=0;i5;i+)/左右两斜边赋值左右两斜边赋值1 ai4-i=1;ai4+i=1;for(i=2;i1;j-)aij=ai-1j-1+ai-1j+1;for(i=0;i5;i+)for(j=0;j9;j+)if(aij=0)cout;/值为值为0的元素输出为空格的元素输出为空格 elsecoutaij;coutendl;方法二方法二000010000000101000001020100010303010104060401面向对象程序设计习题面向对象程序设计习题#include#define N 5void main()int i,j,aNN;aNN=1,1,1;for(i=2;iN;i+)ai0=1;aii=1;for(j=1;j=i;j+)aij=ai-1j-1+ai-1j;for(i=0;iN;i+)for(j=0;j20-2*i;j+)printf();for(int k=0;k=i;k+)printf(%d,aik);/正确为:正确为:printf(%4d,aik);printf(n);错误答案错误答案面向对象程序设计习题面向对象程序设计习题 (8)将一个一维数组中相同的元素删除到只保留一个,然后按将一个一维数组中相同的元素删除到只保留一个,然后按由大到小的顺序输出。由大到小的顺序输出。#include void main()int a6=1,7,3,7,22,9;int i,j,t,flag;int m=6,n;n=m;/n控制输出不同的元素个数控制输出不同的元素个数/删除相同元素删除相同元素for(i=0;im;i+)for(j=i+1;jn;j+)if(ai=aj)for(int k=j;kn;k+)ak=ak+1;/前移前移n-;j-;/冒泡排序冒泡排序 for(i=0;in;i+)flag=0;for(j=0;jn-i-1;j+)if(ajaj+1)t=aj;aj=aj+1;aj+1=t;flag=1;if(flag=0)break;cout排序后的数组为:排序后的数组为:n;for(i=0;in;i+)cout ain;面向对象程序设计习题面向对象程序设计习题 (8)字符数组字符数组#include#include void main()char a8=agbbcc;char t;int i,j;for(i=0;i8;i+)for(j=0;ji;j+)if(ai=aj)ai=0;for(i=0;i8;i+)coutsetw(2)aiendl;for(i=0;i8;i+)for(j=i+1;j8;j+)if(aiaj)t=ai;ai=aj;aj=t;for(i=0;i8;i+)coutai,endl;面向对象程序设计习题面向对象程序设计习题#include void main()int a10=1,2,1,4,1,6,9,6,7,6;int i,j,t,flag,b10;/冒泡排序冒泡排序 for(i=0;i10;i+)flag=0;for(j=0;j10-i-1;j+)if(ajaj+1)t=aj;aj=aj+1;aj+1=t;flag=1;if(flag=0)break;t=0;/删除相同元素删除相同元素for(i=0;i9-t;i+)if(ai=ai+1)for(j=i+1;j10-t;j+)aj-1=aj;t+;/当相同元素多于当相同元素多于2个时出错个时出错cout排序后的数组为:排序后的数组为:n;for(i=0;i10-t;i+)cout ain;错误答案错误答案/删除相同元素删除相同元素b0=a0;j=0;for(i=1;i10;i+)if(ai!=bj)bj+1=ai;j+;/或或if(ai!=ai-1)bj+1=ai;j+;/或或if(aj!=ai)aj+1=ai;j+;/相邻元素相等则删除一个相邻元素相等则删除一个面向对象程序设计习题面向对象程序设计习题 (8)写一函数,实现两个字符串的比较。相等的结果为写一函数,实现两个字符串的比较。相等的结果为0,不,不等时结果为第一个不相等字符的等时结果为第一个不相等字符的ASCII差值。差值。#includeint cmps(char*p,char*q);void main()char s1128,s2128;cins1;cins2;coutcmps(s1,s2)cmps(s1,s2);int cmps(char*p,char*q)for(;*p!=0&q!=0;p+,q+)if(*p!=*q)break;return(*p-*q);int cmps(char*p,char*q)for(;*p=*q&*p!=0&*q!=0;p+,q+);return(*p-*q);int cmps(char*p,char*q)while(*p=*q)p+;q+;return(*p-*q);面向对象程序设计习题面向对象程序设计习题 习习 题题3 3-1 填空题(1)生存期与存储区域关系密切,一般存储区域分为代码区生存期与存储区域关系密切,一般存储区域分为代码区(code area)、数、数据区域据区域(data area)、栈区、栈区(stack area)和堆区和堆区(heap area)。代码区用来存。代码区用来存放放 程序代码程序代码,与其他存储区相对应的生存期分别为,与其他存储区相对应的生存期分别为 静态生存期静态生存期 、局局部生存期部生存期 、和和 动态生存期动态生存期 。(2)局部变量一般具有局部变量一般具有 块块 作用域,还可能具有作用域,还可能具有 作用域;全局变量作用域;全局变量具有具有 文件文件 作用域。作用域。(3)静态成员属于静态成员属于 类类 ,而不属于,而不属于 对象对象 ,它由同一个类的所有对象共,它由同一个类的所有对象共同维护,为这些对象所共享。静态函数成员可以直接引用该类的同维护,为这些对象所共享。静态函数成员可以直接引用该类的 静态静态数据数据 和函数成员,而不能直接引用和函数成员,而不能直接引用 非静态数据成员非静态数据成员 。对于公有的静。对于公有的静态函数成员,可以通过态函数成员,可以通过 类名类名 或或 对象名对象名 来调用;而一般的非静态函来调用;而一般的非静态函数成员只能通过对象名来调用。数成员只能通过对象名来调用。(4)在实际程序设计中,一个源程序可划分为三个文件:在实际程序设计中,一个源程序可划分为三个文件:类声明文件类声明文件、类类实现文件实现文件、和和 类的使用文件类的使用文件 。面向对象程序设计习题面向对象程序设计习题 3-3 阅读程序题(1)以下是一个类中包含另一个类对象成员以下是一个类中包含另一个类对象成员(类的组合类的组合)的例子,试分析并给出以下程序的运行结果。的例子,试分析并给出以下程序的运行结果。面向对象程序设计习题面向对象程序设计习题#include class Son int age;public:Son()age=1;Son(int i)age=i;void print()cout儿子的年龄是:儿子的年龄是:ageendl;class Father int age;Son s1,s2;/类的组合类的组合public:Father(int a1,int a2,int f):s2(a2),s1(a1)age=f;void print()c o u t “父 亲 的 年 龄 是:父 亲 的 年 龄 是:ageendl;Son&gets1()cout第一个第一个;return s1;Son&gets2()cout第二个第二个;return s2;void main()Father f(10,5,38);f.p r i n t();f.g e t s 1().p r i n t();f.gets2().print();父亲的年龄是:父亲的年龄是:38第一个儿子的年龄是:第一个儿子的年龄是:10第二个儿子的年龄是:第二个儿子的年龄是:5面向对象程序设计习题面向对象程序设计习题#include#includeclass student char name10;int age;public:student(char in_name,int in_age)strcpy(name,in_name);age=in_age;int get_age()return age;char*get_name()return name;friend int compare(student&s1,student&s2)if(s1.ages2.age)return 1;else if(s1.age=s2.age)return 0;else return-1;(2)程序代码如下:程序代码如下:面向对象程序设计习题面向对象程序设计习题 void main()student stu=student(王红王红,18),student(吴伟吴伟,19),student(李丽李丽,17);int i,min=0,max=0;for(i=1;i3;i+)if(compare(stumax,stui)=-1)max=i;else if(compare(stumax,stui)=1)min=i;cout最大年龄:最大年龄:stumax.get_age(),姓名:,姓名:stumax.get_name()endl;cout最小年龄:最小年龄:stumin.get_age(),姓名:,姓名:stumin.get_name()endl;程序运行结果为程序运行结果为:最大年龄:最大年龄:19,姓名:吴伟,姓名:吴伟最小年龄:最小年龄:17,姓名:李丽,姓名:李丽面向对象程序设计习题面向对象程序设计习题#includeclass stack;class nodeint data;node*prev;public:node(int d,node*n)data=d;prev=n;friend class stack;(3)下列程序实现的是堆栈的压入和弹出。其中有两个类,一个下列程序实现的是堆栈的压入和弹出。其中有两个类,一个是结点类,它包含结点值和指向上一结点的指针;另一个类是是结点类,它包含结点值和指向上一结点的指针;另一个类是堆栈类,数据成员为堆栈的头指针,它是结点类的友员。试分堆栈类,数据成员为堆栈的头指针,它是结点类的友员。试分析程序,并说明堆栈的压入和弹出过程。析程序,并说明堆栈的压入和弹出过程。class stack node*top;public:stack()top=0;void push(int i);int pop();void stack:push(int i)node*n=new node(i,top);top=n;int stack:pop()node*t=top;if(top)top=top-prev;int c=t-data;delete t;return c;return 0;main()int c;stack s;for(int j=0;jc;s.push(c);for(j=0;j10;j+)/10个整数出栈,个整数出栈,couts.pop()“”;/实现了输入的顺序与输出的顺序相反实现了输入的顺序与输出的顺序相反 coutn;return 1;分析:实现了输入的顺序与分析:实现了输入的顺序与输出的顺序相反输出的顺序相反面向对象程序设计习题面向对象程序设计习题 3-4 完成下列程序完成下列程序(1)下面是一个计算器类的定义,请完成该类的实现下面是一个计算器类的定义,请完成该类的实现(成成员函数的定义员函数的定义),并在主函数中先将计算器给定初值,并在主函数中先将计算器给定初值99,然,然后进行二次加后进行二次加1,一次减,一次减1,最后显示计算器的值。,最后显示计算器的值。class counterint value;public:counter(int number);/构造函数构造函数void increment();/给原值加给原值加lvoid decrement();/给原值减给原值减1int getvalue();/取得计数值取得计数值void display();/显示计算器值显示计算器值;面向对象程序设计习题面向对象程序设计习题#include class counterint value;public:counter(int number);void increment();/给原值加给原值加lvoid decrement();/给原值减给原值减1int getvalue();/取得计数值取得计数值void display();/显示计算器值显示计算器值;counter:counter(int number)value=number;void counter:increment()value+;void counter:decrement()value-;int counter:getvalue()return value;void counter:display()coutvalue=valueendl;void main()counter counter1(99);counter1.increment();/+counter1.increment();/+counter1.decrement();/-counter1.display();面向对象程序设计习题面向对象程序设计习题 (2)下列程序接收若干用户的姓名和电话,然后输出。下列程序接收若干用户的姓名和电话,然后输出。#include iostream.h#include string.h#include iomanip.hconst int N=5;class personchar name10;char num10;public:void getdata()strcpy(name,na);strcpy(num,nu);void outdata(person pnN);void person:outdata(person pnN)int i;for(i=0;iN;i+)cout.width(10);cout.width(10);void main()char*na5=li,zh,li,zh,li;char*nu5=01,02,03,04,05;person obj5;/对象数组对象数组for(int i=0;i5;i+)obji.getdata(nai,nui);*pt=obj;char*na,char*nu或:或:char na,char nu coutpni.nameendl;coutpni.numoutdata(pt);或:或:pt-outdata(obj);面向对象程序设计习题面向对象程序设计习题 3-5 编程题(1)定义一个名为定义一个名为rectangle的矩形类,其属性数据为矩形的矩形类,其属性数据为矩形左上角和右下角点的坐标,要求通过对该类对象的调左上角和右下角点的坐标,要求通过对该类对象的调用计算矩形的面积。用计算矩形的面积。#include#include class Rectangle int X1,Y1,X2,Y2;public:Rectangle(int x1,int y1,int x2,int y2)X1=x1;Y1=y1;X2=x2;Y2=y2;int Area();int Rectangle:Area()return fabs(X2-X1)*(Y2-Y1);void main()Rectangle A(10,20,30,50);cout面积为面积为A.Area()endl;面向对象程序设计习题面向对象程序设计习题 (2)定义一个名为定义一个名为complex的复数类,其属性数据为复数的复数类,其属性数据为复数的实部和虚部,要求构造函数和拷贝构造函数,并定的实部和虚部,要求构造函数和拷贝构造函数,并定义成员函数打印复数的值。义成员函数打印复数的值。#include class complex/复数类声明复数类声明 double real;double imag;public:complex(double r=0.0,double i=0.0)/构造函数构造函数 real=r;imag=i;complex(complex&c)/拷贝构造函数拷贝构造函数 real=c.real;imag=c.imag;void display()/显示复数的值显示复数的值cout“实部为实部为:”real“虚部为虚部为:imagendl;void main()complex A;A.display();complex B(2,3);B.display();complex C(B);C.display();面向对象程序设计习题面向对象程序设计习题 (3)定义一个名为定义一个名为circle的圆类,其属性数据为圆的半径,的圆类,其属性数据为圆的半径,定义成员函数计算圆的面积。编写主函数计算一个内定义成员函数计算圆的面积。编写主函数计算一个内径和外径分别为径和外径分别为5和和8的圆环的面积。的圆环的面积。#include const float PI=3.14159;/define PI 3.14159class circle/类声明类声明 double radius;public:circle(double r=0.0)radius=r;/构造函数构造函数double area()return PI*radius*radius;void main()circle A(5);circle B(8);cout圆环面积圆环面积B.area()-A.area()endl;面向对象程序设计习题面向对象程序设计习题 (4)试定义一个字符串类试定义一个字符串类string,使其至少具有内容,使其至少具有内容(contents)和长度和长度(length)两个数据成员,分别定义不同的成员函数,两个数据成员,分别定义不同的成员函数,用于显示字符串、求字符串长度、给原字符串后连接另一用于显示字符串、求字符串长度、给原字符串后连接另一个字符串。个字符串。#include#include class string/类声明类声明 int length;char*contents;public:string()length=0;contents=0;string(const char*str);/构造函数构造函数void display()const;/显示值显示值void getlength();void append(const char*tail);string:string(const char*str)length=strlen(str);contents=new charlength+1;strcpy(contents,str);面向对象程序设计习题面向对象程序设计习题 void string:display()const/显示显示 if(contents=0)coutempty.n;elsecout字符串的内容为字符串的内容为contentsendl;void string:getlength()/获取长度获取长度length=strlen(contents);cout字符串的长度为字符串的长度为lengthendl;void string:append(const char*tail)/连接连接char*tmp;length+=strlen(tail);tmp=new charlength+1;strcpy(tmp,contents);strcat(tmp,tail);delete contents;contents=tmp;void main()string s0,s1(a string);s0.display();s1.display();s1.getlength();string s2(this);s2.append(a string);cout连接的连接的;s2.display();面向对象程序设计习题面向对象程序设计习题 (5)编写一个程序:声明一个编写一个程序:声明一个Cat类,拥有静态数据成员类,拥有静态数据成员HowManyCats,用以记录,用以记录Cat的个体数目;拥有静态成员的个体数目;拥有静态成员函数函数GetHowMany(),用以存取,用以存取HowManyCats。设计程序。设计程序并测试这个类,体会静态数据成员和静态成员函数的用法。并测试这个类,体会静态数据成员和静态成员函数的用法。#include class Catstatic int HowManyCat;/引用性说明引用性说明public:Cat()HowManyCat+;Cat()HowManyCat-;static void Get_HowManyCat()cout总数总数:HowManyCatendl;int Cat:HowManyCat=0;/定义性说明定义性说明void main()Cat f1;Cat:Get_HowManyCat();Cat f2;f2.Get_HowManyCat();f1.Cat();Cat:Get_HowManyCat();面向对象程序设计习题面向对象程序设计习题 (7)实现一单链表的逆置,并输出逆置前后的结果。实现一单链表的逆置,并输出逆置前后的结果。struct Node int data;Node*next;class ListNode*head;public:List()head=NULL;void InsertList(int aData,int bData);/链表结点的插入链表结点的插入void DeleteList(int aData);/链表结点的删除链表结点的删除void OutputList();/链表结点的输出链表结点的输出Node*Gethead()return head;Node*reverse(Node*head);void List:OutputList()/链表输出函数链表输出函数Node*current=head;while(current!=NULL)coutdatanext;cout next;/q指向指向2号号 while(q!=NULL)r=q-next;/r指向指向3号号 q-next=p;/2号的号的next指向指向1号号 p=q;/p指向指向2号号 q=r;/q指向指向3号号 head-next=NULL;/1号的号的next指向指向NULL,head=p;/循环结束之后,循环结束之后,p指向原来的末结点,现在是头结指向原来的末结点,现在是头结点点 return head;/返回头结点返回头结点 面向对象程序设计习题面向对象程序设计习题 习题习题4 4-1 填空题(1)派生新类的过程经历三个过程:派生新类的过程经历三个过程:吸收基类成员吸收基类成员、改造基类成员改造基类成员和和添加添加新的成员新的成员。(2)在类族中,直接参与派生出某类的基类称为在类族中,直接参与派生出某类的基类称为直接基类直接基类;基类的基类甚;基类的基类甚至更高层的基类称为至更高层的基类称为间接基类间接基类。(3)在继承中,如果只有一个基类,则这种继承方式称为在继承中,如果只有一个基类,则这种继承方式称为 单继承单继承 ;如果;如果基类名有多个,则这种继承方式称为基类名有多个,则这种继承方式称为 多继承多继承 。(4)C+中的运算符除了中的运算符除了类属关系运算符类属关系运算符“.”、作用域分辨符、作用域分辨符“:”、成员、成员指针运算符指针运算符“*”、sizeof运算符和三目运算符运算符和三目运算符“?:?:”之外,全部可之外,全部可以重载,而且只能重载以重载,而且只能重载C+中已有的运算符,不能臆造新的运算符。中已有的运算符,不能臆造新的运算符。(5)如果用普通函数重载双目运算符,需要如果用普通函数重载双目运算符,需要 1 个操作数;重载单目运算个操作数;重载单目运算符,需要符,需要 0 个操作数。如果用友员函数重载双目运算符,需要个操作数。如果用友员函数重载双目运算符,需要 2个个操作数;重载单目运算符,需要操作数;重载单目运算符,需要 1 个操作数。个操作数。(6)当基类中的某个成员函数被声明为虚函数后,此虚函数就可以在一个当基类中的某个成员函数被声明为虚函数后,此虚函数就可以在一个或多个派生类中被重新定义,在派生类中重新定义时,其函数原型,或多个派生类中被重新定义,在派生类中重新定义时,其函数原型,包括包括返回类型返回类型、函数名函数名和和参数个数参数个数,以及,以及参数类型参数类型和和参数的顺序参数的顺序都必都必须与基类中的原型完全相同。须与基类中的原型完全相同。面向对象程序设计习题面向对象程序设计习题 4-3 阅读程序题阅读程序题分析下列程序,写出运行结果分析下列程序,写出运行结果(1)程序代码如下:程序代码如下:考察:继承关系考察:继承关系#include class B int x1,x2;public:void Init(int n1,int n2)x1=n1;x2=n2;int inc1()return+x1;int inc2()return+x2;void disp()coutB,x1=x1,x2=x2endl;面向对象程序设计习题面向对象程序设计习题 class D1:B int x3;public:D1(int n3)x3=n3;void Init(int n1,int n2)B:Init(n1,n2);int inc1()return B:inc1();int inc2()return B:inc2();int inc3()return+x3;void disp()coutD1,x3=x3endl;class D2:public B int x4;public:D2(int n4)x4=n4;int inc1()int temp=B:inc1();temp=B:inc1();temp=B:inc1();return B:inc1();int inc4()return+x4;void disp()coutD2,x4=x4endl;面向对象程序设计习题面向对象程序设计习题 B,x1=-2,x2=-2D1,x3=3D2,x4=6D2,x4=6D2,x4=6void main()B b;b.Init(-2,-2);b.disp();D1 d1(3);d1.Init(5,5);d1.inc1();d1.disp();D2 d2(6);d2.Init(-4,-4);d2.B:disp();d2.disp();d2.inc1();d2.inc2();d2.B:disp();d2.disp();d2.B:inc1();d2.B:disp();d2.disp();B,x1=-2,x2=-2D1,x3=3B,x1=-4,x2=-4D2,x4=6B,x1=0,x2=-3D2,x4=6B,x1=1,x2=-3D2,x4=6面向对象程序设计习题面向对象程序设计习题 (2)程序代码如下(课件例题):程序代码如下(课件例题):考察:虚拟派生中构造函数的执行顺序考察:虚拟派生中构造函数的执行顺序#includeclass Level1/声明基类声明基类Level1 public:int n1;Level1(int in_n1)n1=in_n1;coutThis is Level1,n1=n1endl;class Level21:virtual public Level1 /Level1为虚基类,派生类为虚基类,派生类Level21 public:intn21;Level21(int a):Level1(a)n21=a;coutThis is Level21,n21=n21endl;面向对象程序设计习题面向对象程序设计习题 class Level22:virtual public Level1 /Level1为虚基类,派生类为虚基类,派生类Level22 public:int n22;Level22(int a):Level1(a)n22=a;coutThis is Level22,n22=n22endl;class Level3:public Level21,public Level22 /声明派生类声明派生类Level3 public:int n3;Level3(int a):Level1(a),Level21(a),Level22(a)n3=a;coutThis is Level3,n3=n3endl;void main()Level3 obj(3);/定义定义Level3类对象类对象obj This is Level1,n1=3This is Level21,n21=3This is Level22,n22=3This is Level3,n3=3程序运行结果为:程序运行结果为:面向对象程序设计习题面向对象程序设计习题 (3)下列程序中,基类下列程序中,基类base和派生类和派生类d1、d2中都含有私有、中都含有私有、保护和公有成员,保护和公有成员,d1类是类是base的派生类,的派生类,d2是是d1的派的派生类。试分析下列程序的访问权限。生类。试分析下列程序的访问权限。考察:继承中成员访问属性的变化考察:继承中成员访问属性的变化面向对象程序设计习题面向对象程序设计习题#include class base private:int n1;protected:int k1;public:base()n1=0;k1=1;void fun1()coutn1k1endl;class d1:public baseint n2;protected:int k2;public:d1()n2=10;k2=11;void fun2()coutn1k1endl;coutn2k2endl;class d2:public d1int n3;protected:int k3;public:d2()n3=20;k3=21;void fun3()coutn1k1endl;coutn2k2endl;coutn3k3endl;面向对象程序设计习题面向对象程序设计习题 void main()base baseobj;d1 d1obj;d2 d2obj;baseobj.fun1();d1obj.fun2();d2obj.fun3();回答下列问题:回答下列问题:l l 派生类派生类d1中成员函数中成员函数fun2()能否访问基类能否访问基类base中的成员中的成员fun1()、n1和和k1?l l 派生类派生类d1的对象能否访问基类的对象能否访问基类base中的成员中的成员fun1()、n1和和k1?l l 派生类派生类d2中成员函数中成员函数fun3()能否访问直接基类能否访问直接基类d1中的成员中的成员fun2()、n2和和k2?能否访问基类?能否访问基类base中的成员中的成员fun1()、n1和和k1?l l 派生类派生类d2的对象能否访问直接基类的对象能否访问直接基类d1中的成员中的成员fun2()、n2和和k2?能否访问基类能否访问基类base中的成员中的成员fun1()、n1和和k1?以上程序有错,请改正,并上机验证。以上程序有错,请改正,并上机验证。privateprotectedpublicbasen1k1base(),fun1()d1n2k2d1(),fun2()d2n3k3d2(),fun3()privateprotectedpublicbasen1k1base(),fun1()d1n2k2k1d1(),fun2()fun1()d2n3k3k2k1d2(),fun3()fun2()fun1()面向对象程序设计习题面向对象程序设计习题 (1)能访问能访问base中公有的中公有的fun1()和保护的和保护的k1,不能访问私有的,不能访问私有的n1(2)能访问能访问base中公有的中公有的fun1(),不能访问,不能访问n1和和k1(3)能访问能访问d1中公有的中公有的fun2()和和k2,不能访问私有的,不能访问私有的n2能访问能访问base中公有的中公有的fun1()和和k1,不能访问私有的,不能访问私有的n1(4)能访问能访问d1中公有的中公有的fun2(),不能访问私有的,不能访问私有的n2和和k2能访问能访问base中公有的中公有的fun1(),不能访问私有的,不能访问私有的n1和和k1 fun2函数中:函数中:coutn1k1endl;替换为替换为fun1();fun3函数中:函数中:coutn1k1endl;coutn2k2endl;替换为替换为fun2();面向对象程序设计习题面向对象程序设计习题 (4)下列程序是一个有关下列程序是一个有关虚基类及其派生类的初始化的程序虚基类及其派生类的初始化的程序。如果虚基类定义有非默认形式的如果虚基类定义有非默认形式的(即带形参即带形参)构造函数,在整构造函数,在整个继承结构中,直接或间接继承虚基类的所有派生类,都必个继承结构中,直接或间接继承虚基类的所有派生类,都必须在构造函数的须在构造函数的成员初始化表成员初始化表中列出对虚基类的初始化。中列出对虚基类的初始化。面向对象程序设计习题面向对象程序设计习题#include class B1public:int n1;B1(int in_n1)n1=in_n1;coutB1,n1=n1endl;class B21:virtual public B1public:int n21;B21(int a):B1(a)n21=a;coutB21,n21=n21endl;class B22:virtual public B1public:int n22;B22(int a):B1(a)n22=a;coutB22,n22=n22endl;class B3:public B21,public B22public:int n3;B3(int a):B1(a),B21(a),B22(a)n3=a;coutB3,n3=n3endl;void main()B3 obj(5);B1,n1=5B21,n21=5B22,n22=5B3,n3=5程序运行结果为:程序运行结果为:面向对象程序设计习题面向对象程序设计习题 如果程序运行结果为:如果程序运行结果为:B1,n1=5B22,n22=5B21,n21=5B3,n3=5上述程序应该怎么改?上述程序应该怎么改?如果将如果将 B3(inta):B1(a),B21(a),B22(a)n3=a;coutB3,n3=n3endl;中的中的B21(a)和和B22(a)的位置调换,程序的运的位置调换,程序的运行结果是否会有变化?行结果是否会有变化?class B3:public B21,public B22改为改为class B3:public B22,public B21 没有变化,初始化的顺序与继承顺序有关,与初始化列表的顺没有变化,初始化的顺序与继承顺序有关,与初始化列表的顺序无关序无关面向对象程序设计习题面向对象程序设计习题 4-4 完成下列程序(1)下列程序是一个从下列程序是一个从Point类类私有派生私有派生新的矩形新的矩形Rectangle类的程序。请填空完成程序,并上机运行验证。类的程序。请填空完成程序,并上机运行验证。面向对象程序设计习题面向对象程序设计习题 class Rectangle:private:float W,H;public:void InitR(float x,float y,float w,float h);W=w;H=h;void Move(float xOff,float yOff)Point:Move(xOff,yOff);float GetX()return Point:GetX();float GetY()return Point:GetY();float GetH()return H;float GetW()return W;#include#include class Point private:float X,Y;public:void InitP(float xx=0,float yy=0)X=xx;Y=yy;void Move(float xOff,float yOff);float GetX()return X;float GetY()return Y;class Rectangle:private:float W,H;public:void InitR(float x,float y,float w,float h);W=w;H=h;void Move(float xOff,float yOff)Point:Move(xOff,yOff);float GetX()return Point:GetX();float GetY()return Point:GetY();float GetH()return H;float GetW()return W;面向对象程序设计习题面向对象程序设计习题 void main()Rectangle rect;rect.InitR(2,3,20,10);rect.Move(3,2);coutThe data of rect(X,Y,W,H):endl;coutrect.GetX(),rect.GetY(),rect.GetW(),rect.GetH()endl;程序运行结果为:程序运行结果为:The data of rect(X,Y,W,H):5,5,20,10X+=xOff;Y+=yOff;private Point InitP(x,y);面向对象程序设计习题面向对象程序设计习题 (2)下列程序中声明一个圆类下列程序中声明一个圆类circle和一个桌子类和一个桌子类table,另外,另外声明一个圆桌类声明一个圆桌类roundtable,它是由,它是由circle和和table两个类派两个类派生的,要求声明一个圆桌类对象,并输出圆桌的高度、面生的,要求声明一个圆桌类对象,并输出圆桌的高度、面积和颜色。请填空完成程序,并上机运行验证。积和颜色。请填空完成程序,并上机运行验证。面向对象程序设计习题面向对象程序设计习题 class table double height;public:table(double h)height=h;double get_height()return height;class roundtable:public table,public circle char*color;public:roundtable(double h,double r,char c):color=new charstrlen(c)+1;char*get_color()return color;#include#includeclass circledouble radius;public:circle(double r)radius=r;double get_area()return ;class table double height;public:table(double h)height=h;double get_height()return height;class roundtable:public table,public circle char*color;public:roundtable(double h,double r,char c):color=new charstrlen(c)+1;char*get_color()return color;面向对象程序设计习题面向对象程序设计习题 void main()roundtable rt(0.8,1.0,白色白色);cout圆桌数据:圆桌数据:endl;cout圆桌高度:圆桌高度:rt.get_height()endl;cout圆桌面积:圆桌面积:rt.get_area()endl;cout圆桌颜色:圆桌颜色:rt.get_color()endl;3.14*radius*radius circle(r),table(h)strcpy(color,c)面向对象程序设计习题面向对象程序设计习题 (3)这是一个用这是一个用运算符重载为友元运算符重载为友元重载的方法重做复数加减法重载的方法重做复数加减法的运算,请填空完成程序并上机运行验证的运算,请填空完成程序并上机运行验证(类似课件例题类似课件例题)。面向对象程序设计习题面向对象程序设计习题 cl=(5,4)c2=(2,10)c3=c1-c2=(3,-6)c4=c1+c2=(7,14)real=r;imag=i;complex(c1.real+c2.real,c1.imag+c2.imag)complex(c1.real-c2.real,c1.imag-c2.imag)#include class complex private:double real;double imag;public:complex(double r=0.0,double i=0.0);friend complex operator+(complex c1,complex c2);friend complex operator-(complex c1,complex c2);void display();complex operator+(complex c1,complex c2)return ;complex operator-(complex c1,complex c2)return ;void complex:display()cout(real,imag)endl;void main()complex c1(5,4),c2(2,10),c3,c4;coutcl=;c1.display();coutc2=;c2.display();c3=c1-c2;coutc3=c1-c2=;c3.display();c4=c1+c2;coutc4=c1+c2=;c4.display();面向对象程序设计习题面向对象程序设计习题 4-5 编程题(1)声明一个水果类和树类,并描述它们的一些特征,在此基声明一个水果类和树类,并描述它们的一些特征,在此基础上派生出苹果类和桃子类,定义它们的一些基本功能。础上派生出苹果类和桃子类,定义它们的一些基本功能。(2)编写程序声明一个编写程序声明一个Shape基类,再派生出基类,再派生出Rectangle和和Circle类,二者都有类,二者都有GetArea()函数计算对象的面积。函数计算对象的面积。#include const double PI=3.14159;class Shapes/基类基类Shapes int x,y;public:Shapes(int xx,int yy=0)x=xx;y=yy;void GetArea()coutThe area of shapes is undefinedendl;class Rectangle:public Shapes/派生类派生类Rectangle int wide,high;public:Rectangle(int xx,int yy,int w,int h):Shapes(xx,yy)wide=w;high=h;void GetArea()coutThe area of rectangle is:wide*high endl;方法一方法一class Circle:public Shapes/派生类派生类Circle int radius;public:Circle(int xx,int yy,int r):Shapes(xx,yy)radius=r;void GetArea()coutThe area of circle is:PI*radius*radiusendl;void main()Shapes sh(5,8);sh.GetArea();Rectangle rect(5,8,10,10);rect.GetArea();Circle cir(5,8,10);cir.GetArea();方法一方法一#include const double PI=3.14159;class Shapes/基类基类Shapesprotected:int x,y;public:void setvalue(int xx,int yy=0)x=xx;y=yy;void GetArea()coutThe area of shapes is undefinedendl;class Rectangle:public Shapes/派
展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  装配图网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:面向对象程序设计与VC实践习题答案
链接地址:https://www.zhuangpeitu.com/article/168963159.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!