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运算符有什么不同?