C++AND UML习题及答案(给学生)(7)

2019-07-31 09:36

int main() {

int *a = Fn1();

cout <<\delete a; return 0; }

int* Fn1() {

int * p = new int (5); return p; }

5-16引用和指针有何区别?何时只能使用指针而不能使用引用?

解:

指针可以为NULL值,引用是一个别名,不能为NULL值;指针可以被赋值,引用只可以被初始化,不可以被赋为另一个对象的别名;指针可以指向堆中空间,引用不可以指向堆中空间。

当需要对变量重新赋以另外的地址或赋值为NULL时只能使用指针。

5-17 定义一个整型变量a,一个整型指针p,一个引用r,通过p把a的值改为10,通过r把a的值改为5

解:

void main() { int a;

int *p = &a; int &r = a; *p = 10; r = 5; }

5-18 比较值调用和引用调用的相同点与不同点。 解:

值调用是指当发生函数调用时,给形参分配内存空间,并用实参来初始化形参(直接将实参的值传递给形参)。这一过程是参数值的单向传递过程,一旦形参获得了值便与实参脱离关系,此后无论形参发生了怎样的改变,都不会影响到实参。 引用调用将引用作为形参,在执行主调函数中的调用语句时,系统自动用实参来初始化形参。这样形参就成为实参的一个别名,对形参的任何操作也就直接作用于实参。

第 六 章 继承与派生

6-1 比较类的三种继承方式public公有继承、protected保护继承、private私有继承之间的差别。 解:

不同的继承方式,导致不同访问属性的基类成员在派生类中的访问属性也有所不同: 公有继承,使得基类public(公有)和protected(保护)成员的访问属性在派生类中不变,而基类private(私有)成员不可访问。 私有继承,使得基类public(公有)和protected(保护)成员都以private(私有)成员身份出现在派生类中,而基类private(私有)成员不可访问。

保护继承中,基类public(公有)和protected(保护)成员都以protected(保护)成员身份出现在派生类中,而基类private(私有)成员不可访问。

6-2 定义一个哺乳动物Mammal类,再由此派生出狗Dog类,定义一个Dog类的对象,观察基类与派生类的构造函数与析构函数的调用顺序。 解: 源程序:

#include

enum myColor{ BLACK, WHITE }; class Mammal {

public:

// constructors Mammal(); ~Mammal();

//accessors

int GetAge() const { return itsAge; } void SetAge(int age) { itsAge = age; } int GetWeight() const { return itsWeight; }

void SetWeight(int weight) { itsWeight = weight; }

//Other methods

void Speak() const { cout <<\

protected: int itsAge; int itsWeight; };

class Dog : public Mammal {

public: Dog(); ~Dog();

myColor GetColor() const { return itsColor; }

void SetColor (myColor color) { itsColor = color; }

void WagTail() { cout <<\

private:

myColor itsColor; };

Mammal::Mammal(): itsAge(1), itsWeight(5) {

cout <<\}

Mammal::~Mammal() {

cout <<\}

Dog::Dog(): itsColor (WHITE) {

cout <<\}

Dog::~Dog() {

cout <<\}

int main() {

Dog Jack; Jack.Speak(); Jack.WagTail();

cout <<\

return 0; }

程序运行输出:

Mammal constructor... Dog constructor... Mammal sound!

Tail wagging... Fido is 1 years old Dog destructor... Mammal destructor...

6-3 定义一个基类,构造其派生类,在构造函数中输出提示信息,观察构造函数的执行情况。 解:

#include

class BaseClass {

public:

BaseClass(); };

BaseClass::BaseClass() {

cout <<\构造基类对象!\ }

class DerivedClass : public BaseClass {

public:

DerivedClass(); };

DerivedClass::DerivedClass() {

cout <<\构造派生类对象!\}

void main() {

DerivedClass d; }

程序运行输出: 构造基类对象! 构造派生类对象!

6-4 定义一个Document类,有name成员变量,从Document派生出Book类,增加PageCount变量。 解:

#include #include

class Document {

public:

Document(){};

Document( char *name );

char *Name; // Document name. void PrintNameOf(); // Print name. };

Document::Document( char *name ) {

Name = new char[ strlen( name ) + 1 ]; strcpy( Name, name ); };

void Document::PrintNameOf() {

cout << Name << endl; }

class Book : public Document {

public:

Book( char *name, long pagecount ); void PrintNameOf(); private:

long PageCount; };

Book::Book( char *name, long pagecount ):Document(name) {

PageCount = pagecount; }

void Book::PrintNameOf() {

cout <<\Document::PrintNameOf(); }


C++AND UML习题及答案(给学生)(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:一位普通小学乡村教师的悼词

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: