《C++ Primer Plus》第13章学习笔记

2021-07-21  本文已影响0人  蓬篙人

类继承

第13章 类继承

1. 一个简单的基类

class Myclass : public MyBaseClass
{
    ...
}

2. 派生类和基类之间的特殊关系

// 基类:TableTennisPlayer,派生类:RatedPlayer
RatedPlayer rplayer(1140, "Mallory", "Duck", true);
TableTennisPlayer& player1 = rplayer;
TableTennisPlayer* player2 = &rplayer;
player1.Name();
player2->Name();
RatedPlayer olaf1(1840, "Olaf", "Loaf", true);
// 调用了隐式复制构造函数
TableTennisPlayer olaf2(olaf1);

3. 继承——is-a关系

4. 多态公有继承

// Employee是基类,Singer是派生类
Employee* p = new Singer;
...
delete p;   // 如果析构函数不是虚函数,则只会调用Employee的析构函数,无法释放Singer的数据
// Hovel隐藏了基类的showperks(int)方法
class Dwelling
{
public:
    virtual void showperks(int a) const;
};
class Hovel : public Dwelling
{
public:
    // 函数特征标不同,将隐藏所有同名函数
    virtual void showperks() const;
};

Hovel trump;
trump.showperks(5);    // 无效,基类方法被隐藏
// 如果Hovel只定义其中一个版本,则另外两个被隐藏
class Dwelling
{
public:
    virtual void showperks(int a) const;
    virtual void showperks(double x) const;
    virtual void showperks() const;
};
class Hovel : public Dwelling
{
public:
    virtual void showperks(int a) const;
    virtual void showperks(double x) const;
    virtual void showperks() const;
};

5. 访问控制:protected

class TheOnlyInstance
{
public:
    static TheOnlyInstance* GetTheOnlyInstance();
    // other methods
protected:
    TheOblyInstance() {}
private:
    // private data
};

TheOnlyInstance* TheOnlyInstance::GetTheOnlyInstance()
{
    static TheOnlyInstance objTheOnlyInstance;
    return &objTheOnlyInstance;
}

int main()
{
    TheOnlyInstance noCanDo;   // 不允许

    TheOnlyInstance* pTheOnlyInstance = TheOnlyInstance::GetTheOnlyInstance();
}

6. 抽象基类

// 抽象基类
class BaseEllipse
{
    ...

public:
    virtual double Area() const = 0;   // 纯虚函数
}

7. 继承和动态内存分配

8. 类设计回顾

函数 能否继承 成员/友元 可否默认生成 可否为虚函数 可否有返回类型
构造函数 成员
析构函数 成员
= 成员
& 任意
转换函数 成员
() 成员
[] 成员
-> 成员
op= 任意
new 静态成员 void*
delete 静态成员 void*
其他操作符 任意
其他成员 成员
友元 友元
上一篇 下一篇

猜你喜欢

热点阅读