C++继承与图算法详解

321、编写一个计算基础代谢率(BMR)的纯虚函数原型。该函数没有参数,返回一个浮点数。

virtual float calculate_bmr() = 0;

322、在成员访问方面,分析公共基类继承和私有基类继承的区别。

在公共基类继承中,基类的公共成员在派生类中仍作为公共成员可用;在私有基类继承中,基类的公共成员在派生类中仅作为私有成员可用。但无论是哪种继承方式,基类的 私有成员 在派生类中都不能被直接访问。

323、描述派生类所拥有的自动构造函数(默认和复制构造函数)。

  1. 自动默认构造函数 :若在对象声明中激活派生类(如布谷鸟钟)的自动默认构造函数,它会激活基类(如普通时钟)的默认构造函数,初始化基类的私有成员变量。这些私有成员变量存在于派生类中,虽无法直接访问,但必须初始化。

  2. 自动复制构造函数 :若派生类未定义自己的复制构造函数,C++会自动提供。它分两步执行:

  3. 激活基类的复制构造函数,复制基类使用的成员变量;
  4. 激活派生类有但基类没有的新成员变量的复制构造函数。

这两步中激活的复制构造函数可能是自动复制构造函数,也可能是为正确复制动态数据结构而专门编写的。

324、解释为什么在赋值操作中,基类对象不能当作派生类对象使用。

基类对象不具备派生类对象特有的成员变量和功能,所以不能当作派生类对象使用。例如普通时钟(基类对象)没有布谷鸟时钟(派生类对象)特有的功能,不能将普通时钟当作布谷鸟时钟使用。

325、从 clock 类派生一个 daylight_clock 类,并实现一个新的成员函数 is_day(),该函数用于判断当前是否为白天(7:00 A.M. 到 6:59 P.M.)。

以下是实现 daylight_clock 类的代码示例:

#include <iostream>

class clock {
public:
    clock();
    void set_time(int hour, int minute, bool morning);
    void advance(int minutes);
    int get_hour() const;
    int get_minute() const;
    bool is_morning() const;

private:
    // 此处省略私有成员实现
};

class daylight_clock : public clock {
public:
    bool is_day() const {
        int hour = get_hour();
        bool morning = is_morning();
        if (morning) {
            return hour >= 7;
        } else {
            return hour < 12 || (hour == 12 && get_minute() == 0);
        }
    }
};

上述代码定义了 daylight_clock 类,它从 clock 类派生而来,并实现了 is_day() 函数,用于判断当前是否为白天(7:00 A.M. 到 6:59 P.M.)。

326、描述派生类中自动赋值运算符和析构函数的行为。

自动赋值运算符与自动析构函数

自动赋值运算符

若派生类未定义自己的赋值运算符,C++ 会自动提供。

该运算符分两步执行:

  1. 激活基类的赋值运算符,以复制基类使用的任何成员变量;
  2. 激活派生类有但基类没有的任何新成员变量的赋值运算符。
<
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值