1.
a. clasp是友元类,所以声明友元的时候必须的加上一个class
friend class clasp;
b.这种情况必须前向声明相关类和函数
snip(muff &);
class muff;
class cuff {
...};
class muff {
..};
c. 跟b的情况一样,需要前向声明相关类和函数
class muff;
class cuff {
public:
void snip(muff &) { ...}
...};
class muff [
friend void cuff::snip(muff &);
...};
2. 这涉及到前向声明的问题。如果想要A类有一个本身为B类的成员函数的友元,B的声明必须位于A的声明之前。反正必须前向声明类A。这个两个要求是相冲突的,所以不能。
3. Sauce是Ribs的私有成员类,只能通过Ribs的Sauce构造函数来创建Sauce的对象。
4.如果有个函数f1()调用函数f2(),如果f2()有个返回值return,就return一个值给f1,然后继续执行f1剩下来的代码,很简单。如果是throw的话,程序会寻找对应的try catch程序块执行,这个可能在f1里面,也可能是在f2外面,
5. 按照从子孙到祖先的顺序排到catch语句类。
6.例1pg指向Superb对象或者Superb的派生类的对象比如Magnificent对象时,if都返回true。而例2当且仅当pg指向Superb的对象的时候if才返回true。
7. Dynamic_cast只允许沿类层次结构向上转换,而static_cast运算符允许向上转换和向下转换。static_cast还允许枚举类和整形之间以及数值类型之间的转换