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

27-复习题

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

15.7 复习题

1.下面建立友元的尝试有什么错误?

a. class snap {
      friend clasp;
      ...
   };
   class clasp { ... };
b. class cuff {
   public:
         void snip(muff &) { ... }
         ...
   };
   class muff {
       friend void cuff::snip(muff &);
       ...
   };
c. class muff {
         friend void cuff::snip(muff &);
         ...
   };
   class cuff {
   public:
         void snip(muff &) { ... }
         ...
   };

2.您知道了如何建立相互类友元的方法。能够创建一种更为严格的友情关系,即类B只有部分成员是类A的友元,而类A只有部分成员是类B的友元吗?请解释原因。

3.下面的嵌套类声明中可能存在什么问题?

class Ribs
{
private:
    class Sauce
    {
        int soy;
        int sugar;
    public:
        Sauce(int s1, int s2) : soy(s1), sugar(s2) { }
    };
    ...
}

4.throw和return之间的区别何在?

5.假设有一个从异常基类派生来的异常类层次结构,则应按什么样的顺序放置catch块?

6.对于本章定义的Grand、Superb和Magnificent类,假设pg为Grand 指针,并将其中某个类的对象的地址赋给了它,而ps为Superb 指针,则下面两个代码示例的行为有什么不同?

if (ps = dynamic_cast<Superb *>(pg))
    ps->say(); // sample #1
if (typeid(*pg) == typeid(Superb))
    (Superb *) pg)->say(); // sample #2

7.static_cast运算符与dynamic_cast运算符有什么不同?