面向对象程序设计作业1.什么叫静态连接?什么叫动态连接?它们的区别是什么?答:静态连接是由编译程序完成的。编译程序将编译生成的目标语言连接成可执行程序文件的过程。动态连接是由操作系统完成的。在应用程序执的行过程中,操作系统根据被调用的函数名连接内存中的动态连接库函数。若相关动态连接库被移出内存,则重新装入动态连接库并重新连接。静态连接是在程序执行之前完成的,动态连接是在程序的执行过程中完成的。静态连接程序在执行时不需要再次装入程序文件,动态连接程序在执行时一般需要重新装入程序文件,因此,静态连接程序一般来说比动态连接程序执行速度快。静态连接程序需要将程序文件全部装入内存,如果不同的程序包含了同样的函数代码,就会在内存装入这些函数的多个副本,动态连接程序总是共用同一个函数副本,因此,静态连接程序一般要比动态连接程序占用更多的内存。2.什么叫静态绑定?什么叫动态绑定?它们的区别是什么?答:静态绑定是在程序运行之前进行的。编译程序或操作系统在装入程序后,计算函数的入口地址,并将该地址填写到相应的函数调用处。动态绑定是程序运行之中完成的。应用程序在执行过程中,激活由编译程序生成的、通过静态或动态方式连接的一段代码,计算函数的入口地址并填写到相应的函数调用处。两者的区别在于:静态绑定在程序执行之前完成,由编译程序或操作系统计算函数的入口地址;动态绑定在程序运行之中完成,由应用程序自己计算函数的入口地址。3.什么叫封装?什么叫包含继承?什么叫受限继承?答:封装是将对象的“属性”和“方法”包装在一起、并对外部提供不同权限的访问接口的机制。包含继承是一种派生类对象完整继承所有基类“属性”和“操作”、并且增加自己的“属性”和“操作”的继承方法。受限继承是一种派生类对象部分继承基类“属性”和“操作”、并且不增加新的“属性”和“操作”的继承方法。4.给出下列表达式的含义:inta=0;//定义一个初值为0的整型变量constinti=5;//定义一个值为5的整型常量constin*constp2;//定义一个指针,指针本身及其指向的内容都不能改变classA;//前向申明一个类AA*p1=newA();//实例化A类的一个对象,并由指针p1指向该对象A*p2=newA[10];//实例化A类的对象数组,包含10个对象,并由指针p2指向第一个对象6.什么叫引用?如何定义引用?请举例说明答:引用类型用&说明,在编译后翻译为指针。逻辑上,引用变量并不分配存储单元存储变量的值,每次对引用变量的操作都转化为被引用变量的操作。引用变量在定义时必须立即初始化。左值引用变量必须用左值表达式初始化,右值引用变量可用左值或右值表达式初始化,如果初始化表达式的类型和引用变量不符,则可能先产生类型相符的匿名变量,然后用初始化表达式初始化匿名变量,并用匿名变量初始化引用变量。函数参数和返回类型都可以定义为引用类型,函数调用传递实参初始化引用参数时也可能产生匿名变量。右值引用变量是指const类型的引用变量,例如,constint&x=3。7.什么叫左值表达式?什么叫右值表达式?答:左值表达式是指能出现在等号左边的表达式。右值表达式是指能出现在等号右边的表达式。所有的表达式都是右值表达式,包括单个变量、函数调用和由运算符构成的任何表达式。因此,左值表达式也是右值表达式,即出现在等号左边的表达式一定能出现在等号右边。反之,右值表达式不一定是左值表达式9.什么叫构造函数?什么叫析构函数?它们的调用时机是什么?答:类同名的成员函数称为构造函数,和类同名且带有波浪线的成员函数称为析构函数。构造函数在对象被实例化时被调用,析构函数在对象被销毁时被调用,同时析构函数可以被手工调用.10.什么是函数的重载?编译器靠什么来区别重载?构造函数可以重载吗?析构函数可以重载吗?答:函数名相同而函数原型不同的函数称为重载函数。编译器靠函数参数个数和类型的区别来区别重载函数。构造函数可以重载,析构函数不能重载。11.类的继承有哪几种方式?答:私有,保护和公有继承。12.定义矩形类Rectangle,要求为:其私有属性为长length、宽width。其公有函数成员有构造函数、析构函数、计算面积和周长的函数,设置长和宽的函数。