C++primerplus习题+答案

news/2024/11/28 18:56:06/

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

a.

class snap
{
    friend clasp;

     ……
};

class clasp{……};

声明一个友元类需要使用以下格式

friend class clasp;

题目内没有使用关键字class,从而造成编译错误。

b.

class cuff
{
public:
    void snip(muff &) {…}
};

class muff
{
    friend void cuff::snip(muff&);
};

class muff;
class cuff
{
public:
    void snip(muff &) {…}
};

class muff
{
    friend void cuff::snip(muff&);
};

2.了解如何建立互为友元的关系后,你能够创建一种更严格的友元关系(即类B只有部分成员是类A的友元,而类A只有部分成员是类B的友元)吗?请解释原因。

部分互为友元的关系是无法建立的。为了使A拥有一个本身为类B的成员函数的友元,B的声明必须位于A的声明之前,因此需要多个前向声明以表示B是一个类,且要表示B类的多个成员方法。同样,如果B以A的一个成员函数作为友元,则在B之前也需要多个前向声明。因此,A,B的前向声明均无法实现。

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

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

 题目提供的代码在语法上是正确的,但是我们设计和使用嵌套类的主要目的是在隐藏部分细节的基础上,在类内部正常访问该类对象。但是Sauce类定义在私有部分,且Sauce的两个数据成员也是私有数据,因此在Ribs类内没有足够的接口,用于访问Sauce对象内的数据。解决方法是为Sauce添加相应接口函数,或者将成员设置为公有成员,便于在类外直接访问。

4.thorw 和 return之间的区别是?

         thorw 和 return语句都会造成当前函数终止并返回,但是具体在实现上,尤其在函数数据栈的处理上是有差别的。假设函数f1()调用函数f2(),f2()中的返回语句导致程序会自动返回f1()函数,并且开始在函数f1()中调用函数f2()后面的一条语句。

        throw语句导致程序沿函数调用的当前序列回溯,直到找到或间接包含对f2()的调用的try语句块为止.return语句可能在并不在f1()中,因此会持续回退,出现栈解退,直到找到这样的try语句块后,才执行下一个匹配的catch语句块,从而影响程序原本功能的实现。

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

        异常类的派生关系可以使用用户更加细致和针对性的处理程序设计中的异常问题,继承关系使用户可以使用捕获基类对象的方式一次性捕获所有派生类的异常。因此,为了更好的实现异常处理,catch块应当首先捕获继承中的派生类异常对象,随后逐渐从继承关系向上,捕获基类的异常,这样才能兼顾异常处理的针对性和全面性。

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

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

dynamic_cast运算符用于将派生类的指针转换为基类的指针,即允许沿类层次结构向上转换;而static_cast仅当两个类型能够进行隐式类型转换时才可以使用,它允许向上转换和向下转换。static_cast运算符还允许枚举类型和整型之间以及数值类型之间的转换。


http://www.ppmy.cn/news/141115.html

相关文章

如果 100 个请求,你怎么用 Promise 去控制并发?

目录 前言 引出 明确概念 思路 实现 另一种实现 疑问 有什么能拓展的功能呢? 结尾 前言 现在面试过程当中 ,手写题必然是少不了的,其中碰到比较多的无非就是当属 请求并发控制 了。现在基本上前端项目都是通过axios来实现异步请求的…

acing851

spfa:Dijkstra的进化版

Android查看CPU和GPU使用率(五十五)

Android查看CPU和GPU使用率 1、top -t 能打印出线程级别的CPU使用情况0.打印进程的堆栈信息。从堆栈信息里可以通过.so辨别哪个线程是干什么的&#xff0c;从而在 top -t 的结果里去查找你想要的那个线程的 CPU 使用情况。 # debuggerd -b <pid>1.查看高通821 GPU使用率…

EXCEL 怎么把一列数据转换为多行多列数据

目的&#xff1a;将一列120个数据转换为12行10列。 1,首先&#xff0c;在B1格输入“A1”&#xff0c;B2格输入“A13”&#xff0c;然后选中B1、B2&#xff0c;将鼠标移到选中框的右下角(此时鼠标变为“”形&#xff0c;下同)&#xff0c; 按住左键不放将框下拉至B5处。此时B3…

TI Sitara系列AM3352/AM3354/AM3359 ARM Cortex-A8方案分享

相对比消费类市场,工业类市场的产品更加稳定、更新换代速度较慢、生命周期更长。但是即便如此,长时间的“供货慌”,还是会对工业类市场造成冲击,因此除了积极寻求更多的供货渠道,寻求替代物料也成了维持产品生命力的又一出路,特别是主处理器。 以工业网关、工业HMI为例,…

数据结构(C语言第2版) 课后习题答案之第四章 串、数组和广义表

目录 第4章 串、数组和广义表 1&#xff0e;选择题 &#xff08;1&#xff09;串是一种特殊的线性表&#xff0c;其特殊性体现在&#xff08; &#xff09;。 &#xff08;2&#xff09;串下面关于串的的叙述中&#xff0c;&#xff08; &#xff09;是不正确的&#xf…

Linux命令之iconv命令

一、命令简介 日常工作中我们需要将windows生成的文件上传到Linux系统&#xff0c;有时候会因为编码问题出现显示乱码。例如我上传了一个csv文件到Linux服务器上&#xff0c;默认编码为GB2312&#xff0c;在Linux打开则会出现乱码&#xff0c;我们需要将文件进行编码转换。icon…

学习逆向某风控id分析

侵权删 1&#xff0c;初始化接口配置接口 请求参数&#xff1a; { "data": { "smid": "2022050615375359f8c969cd07e16daebd9dd4441226e000b0e688bfbb58e6", "os": "android", "sdkver&qu…