21xrx.com
2024-12-22 16:55:16 Sunday
登录
文章检索 我的文章 写文章
《C++面向对象程序设计第3版》课后习题答案
2023-07-11 10:46:37 深夜i     --     --
C++ 面向对象 第3版 习题 答案 程序设计

《C++面向对象程序设计第3版》是一本广泛使用的编程教材,它包含了许多习题,可以帮助读者巩固所学知识。本文将提供该书中部分习题的答案,希望对读者有所帮助。

1.基本语言结构

(1) 什么是变量声明?什么是变量定义?

答:变量声明指在程序中告诉编译器有一个变量存在,但并没有为其分配内存。变量定义则是在程序中为变量分配内存并建立引用名称。例如:

int a; //声明变量a

a = 10; //定义变量a,并初始化为10。

(2) 声明一个指向整数的指针变量p,将其初始化为指向一个整数变量q,该变量的值为10。

答:int q = 10;

int *p = &q;

2.面向对象编程

(1) 建立一个C++类,包含一个整数成员变量和一个成员函数,用于返回该变量的值。

答:

class Demo {

public:

  int num;

  int getNum()

   return num;

};

(2) 给定电影类(Movie),包含电影名字、导演名字和上映时间。请为该类设置成员函数和构造函数,实现对电影信息的读取和设置。

答:

class Movie {

public:

  char name[20];

  char director[20];

  int releaseYear;

  void setName(char n[20]) { //设置电影名称

    strcpy(name, n);

  }

  void setDirector(char d[20]) { //设置导演名称

    strcpy(director, d);

  }

  void setReleaseYear(int y) //设置上映日期

    releaseYear = y;

  char* getName() //获取电影名称

    return name;

  char* getDirector() //获取导演名称

    return director;

  int getReleaseYear() //获取上映日期

    return releaseYear;

  Movie(char n[20], char d[20], int y) { //构造函数

    strcpy(name, n);

    strcpy(director, d);

    releaseYear = y;

  }

};

3.继承和多态

(1) 建立一个基类Animal,包含一个成员函数虚函数bite()。再建立两个子类Dog和Cat,分别重载虚函数bite()。实例化一个Animal对象,通过指针调用bite()函数,会发生什么?

答:

class Animal {

public:

  virtual void bite()

   cout << "Bite by Animal." << endl;

};

class Dog : public Animal {

public:

  virtual void bite()

   cout << "Bite by Dog." << endl;

};

class Cat : public Animal {

public:

  virtual void bite()

   cout << "Bite by Cat." << endl;

};

int main() {

  Animal * a;

  Dog d;

  Cat c;

  a = &d;

  a->bite(); //输出 Bite by Dog.

  a = &c;

  a->bite(); //输出 Bite by Cat.

  return 0;

}

通过指针调用bite()函数时,编译器会根据指针所指向的对象的类型,决定最终调用哪个重载函数。

(2) 建立一个基类Shape,包含一个纯虚函数getArea()。通过该基类派生Rectangle和Triangle类,并在这两个子类中实现getArea()函数。用这两个类分别实例化两个对象,并调用其getArea()函数。

答:

class Shape {

public:

  virtual double getArea() = 0; //纯虚函数

};

class Rectangle : public Shape {

public:

  double width;

  double height;

  Rectangle(double w, double h)

    width = w;

    height = h;

  virtual double getArea() {

    return width * height;

   }

};

class Triangle : public Shape {

public:

  double base;

  double height;

  Triangle(double b, double h)

    base = b;

    height = h;

  virtual double getArea() {

    return (base * height) / 2;

  }

};

int main() {

  Shape * s; //基类指针

  Rectangle r(3,5); //实例化Rectangle对象

  s = &r;

  cout << "Rectangle area: " << s->getArea() << endl; //输出 Rectangle area: 15

  Triangle t(4,3); //实例化Triangle对象

  s = &t;

  cout << "Triangle area: " << s->getArea() << endl; //输出 Triangle area: 6

  return 0;

}

通过基类指针s,调用各个派生类的getArea()函数,可以得到各自的面积。这就是多态的典型应用。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复