什么是面向对象技术
![什么是面向对象技术](https://img.360docs.net/img8c/1gcwl3smitosfy0hn66hw1w4v9ez5sht-c1.webp)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第1章习题
1. 什么是面向对象技术?
2. 面向对象与面向过程程序设计有什么不同?
3. 面向对象技术有哪些优点?
4. 面向对象技术中的封装性有何优缺点?如何克服这些缺点?
5. 为什么要应用继承机制?
6. C++对多态性的支持体现在哪些方面?
7. 目前常用的面向对象程序设计语言有何异同?
8. 什么是.NET?
第2章习题
1. 写出下面程序的运行结果。
#include <>
void main()
{
int* a;
int* &p=a;
int b=10;
p=&b;
cout<<*a< cout<<*p< } 2. 写出下面程序的运行结果。 #include <> void main() { int iarray[10]={0,2,4,6,8,10,12,14,16,18}; int sum=0; int* iptr=iarray; for(int i=0;i<10;i++) { sum+=*iptr; iptr++; } cout<<"sum is"< } 3. 写出下面程序的运行结果。 int m=8; int add3(int x,int y=7,int z=m) { return x+y+z; } void main() { int a=1,b=2,c=3; cout< cout< } 4. 编程求所有的水仙花数。如果一个三位数的个位数、十位数和百位数的立方和等于该数本身,则称该数为水仙花数。 5. 编程求1000以内所有素数。 6. 编写一个可以打印任何一年日历的程序。 7. 在10000以内验证哥德巴赫猜想之“1+1”命题:任意大的偶数,都可以表示为两个素数之和。 8. 编写一个函数,用冒泡法对输入的十个整数从小到大排序。 9. 编写一个函数,输入一个十六进制数,输出相应的十进制数。 10. 将给定的一个二维数组(3×3)转置,即行列互换。 11. 用非递归的函数调用方式求fibonaci数列第n项。fibonaci数列形如: 0,1,1,2,3,5,8,13,┄ 其通项为:F0=0;F1=1;┄;F n=F n-1+F n-2。 12. 编写重载函数max,分别返回字符数组、int数组、long数组、float数组、double 数组和字符串数组的最大元素。 第3章习题 1. 类定义由哪些部分组成?在定义和使用时要注意什么问题? 2. 说明一个类的公有成员、保护成员和私有成员的区别。 3. 何时执行类构造函数及析构函数?若该对象作为类的成员,何时执行其构造函数和析构函数? 4. 创建一个Employee类,该类中有字符数组,表示姓名、街道地址、市、省和邮政编码。其功能有修改姓名、显示数据信息。要求其功能函数的原型放在类定义中,构造函数初始化每个成员,显示信息函数要求把对象中的完整信息打印出来。其中数据成员为保护的,函数为公有的。 5. 修改第4题中的类,将姓名构成Name类,其名和姓在该类中为保护数据成员,其构造函数为接受一个指向完整姓名字符串的指针。该类可显示姓名。然后将Employee类中的姓名成员(字符数组)修改为Name类对象。 6. 改正下列程序中的错误,并说明理由。 程序1: class Student { public void Student() void display() { cin<<'number:'< cout< cout< private: int number,char* name,float score; } 程序2: include <>; class example() { private: int date; static int count public; void example(int y=10)(date=y;) ( cout<<"date="< return count; ) } 7. 写出下面程序的运行结果。注意:构造函数和析构函数的执行次序、构造函数的初始化表。 #include <> class Ex { public: Ex(int x,char c='c'); ~Ex() { cout<<'B'< } void outdata(void) { int da; char ch; }; void main() { Ex x(3,'a'),y(1); Ex z[2]={Ex(10,'a'),Ex(1,'d')}; (); (); z[0].outdata(); } Ex::Ex(int x,char c):da(x),ch(c) { cout<<'A'< } 8. 写出下面程序的运行结果。 #include <> #include <> #include <> class Ex { public: Ex(const char* s) { len=strlen(s); p=new char[len+1]; strcpy(p,s); } Ex() { p=new char[8]; cout<<"****"< } Ex(const Ex& st) { len=strlen; p=new char[len+1]; { delete p; } void outdata(void) { printf("%x:%d ,%x:%s\n",&len,len,&p,p); } private: int len; char* p; }; void main() { Ex x("first"); Ex y=x,z; (); (); } 9. 写出下面程序的运行结果。 #include <> class MyClass { public: MyClass(); MyClass(int); void Display(); ~MyClass(); protected: int number; }; MyClass::MyClass() { cout<<"Constructing normally\n"; } MyClass::MyClass(int m) { number=m; void MyClass::Display() { cout<<"Display a number:"< } MyClass::~MyClass() { cout<<"Destructing\n"; } void main() { MyClass obj1; MyClass obj2(10); (); (); } 10. 什么是静态数据成员?它有何特点? 11. 编写一个类,声明一个数据成员和一个静态数据成员。其构造函数初始化数据成员,并把静态数据成员加1,其析构函数把静态数据成员减1。 (1)编写一个应用程序,创建该类的3个对象,然后显示其数据成员和静态数据成员,再析构每个对象,并显示它们对静态数据成员的影响。 (2)修改该类,增加静态成员函数并访问静态数据成员,并声明静态数据成员为保护成员。体会静态成员函数的使用,静态成员之间与非静态成员之间互访问题。 12. 假设有两个类Student和Score,使用时,怎样允许Score成员访问Student中的私有成员和保护成员? 13. 为什么要定义友元?友元有哪几种类型? 14.改正下面代码的错误。 #include <> class Animal; void SetValue(Animal&,int); void SetValue(Animal&,int,int); class Animal { public: friend void setValue(Animal&,int); protected: int itsWeight; int itsAge; }; =tw; } void SetValue(Animal& ta,int tw,int tn) { =tw; =tn; } void main() { Animal peppy; SetValue(peppy,5); SetValue(peppy,7,9); } 将第14题程序中的友元改成普通函数,为此增加访问类中保护数据的成员函数。 第4章习题 1. 什么是继承?它在软件设计中有什么作用? 2. 比较类的三种继承方式之间的差别。 3. 如果派生类B已经重新定义了基类A的一个成员函数fn1(),没有定义重载成员函数fn2(),怎样调用基类的成员函数fn1()、fn2()? 4. 写出运行结果,分析程序中的访问权限,并回答所列问题。 #include <> class A { public: void f1(); A() { cout<<"A Constructor"< i1=10;j1=11; cout<<"i1="< } ~A(){cout<<"A Destructor"< protected: int j1; private: int i1; class B:public A { public: void f2(); B() { cout<<"B Constructor"< i2=20;j2=21; cout<<"i2="< } ~B(){cout<<"B Destructor"< protected: int j2; private: int i2; }; class C:public B { public: void f3(); C() { cout<<"C Constructor"< i3=30;j3=31; cout<<"i3="< } ~C(){cout<<"C Destructor"< protected: int j3; private: int i3; }; void main() { A a; B b; C c; } (1)派生类B中成员函数f2()能否访问基类A中的成员f1()、i1和j1? (3)派生类C中成员函数 f3()能否访问直接基类 B中的成员 f2()、j2和i2?能否访问间接基类A中的成员f1()、j1和i1? (4)派生类C的对象c能否访问直接基类B中的成员f2()、i2和j2呢?能否访问间接基类A中的成员f1()、j1和i1? (5)根据上述结果总结继承中构造函数和析构函数的调用顺序。 (6)将派生B类的继承方式改为私有继承和保护继承,结果分别怎样?试总结它们的异同。 5. 写出下面程序的运行结果。 #include <> class A { public: A(int i,int j){a=i;b=j;} void move(int x,int y){a+=x;b+=y;} void show() {