当前位置:嗨网首页>书籍在线阅读

28-复习题

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

13.10 复习题

1.派生类从基类那里继承了什么?

2.派生类不能从基类那里继承什么?

3.假设baseDMA ::operator=()函数的返回类型为void,而不是baseDMA &,这将有什么后果?如果返回类型为baseDMA,而不是baseDMA &,又将有什么后果?

4.创建和删除派生类对象时,构造函数和析构函数调用的顺序是怎样的?

5.如果派生类没有添加任何数据成员,它是否需要构造函数?

6.如果基类和派生类定义了同名的方法,当派生类对象调用该方法时,被调用的将是哪个方法?

7.在什么情况下,派生类应定义赋值运算符?

8.可以将派生类对象的地址赋给基类指针吗?可以将基类对象的地址赋给派生类指针吗?

9.可以将派生类对象赋给基类对象吗?可以将基类对象赋给派生类对象吗?

10.假设定义了一个函数,它将基类对象的引用作为参数。为什么该函数也可以将派生类对象作为参数?

11.假设定义了一个函数,它将基类对象作为参数(即函数按值传递基类对象)。为什么该函数也可以将派生类对象作为参数?

12.为什么通常按引用传递对象比按值传递对象的效率更高?

13.假设Corporation是基类,PublicCorporation是派生类。再假设这两个类都定义了head()函数,ph是指向Corporation类型的指针,且被赋给了一个PublicCorporation对象的地址。如果基类将head()定义为:

a.常规非虚方法;

b.虚方法;

则ph->head()将被如何解释?

14.下述代码有什么问题?

class Kitchen
{
private:
    double kit_sq_ft;
public:
    Kitchen() {kit_sq_ft = 0.0; }
    virtual double area() const { return kit_sq_ft \* kit_sq_ft; }
};
class House : public Kitchen
{
private:
    double all_sq_ft;
public:
    House() {all_sq_ft += kit_sq_ft;}
    double area(const char *s) const { cout << s; return all_sq_ft; }
};