前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EasyC++75,继承(二)

EasyC++75,继承(二)

作者头像
TechFlow-承志
发布2022-08-26 17:34:30
1260
发布2022-08-26 17:34:30
举报
文章被收录于专栏:TechFlow

作者 | 梁唐

大家好,我是梁唐。

这是EasyC++系列的第75篇,来聊聊面向对象继承。

继承(二)

在实际编程当中,父类和子类之间会存在一些特殊的关键。

比如子类可以使用父类所有的public方法,我们来看一下之前的例子:

代码语言:javascript
复制
class Human {
   private:
     string _name;
     int _hp;
     int _property;
    public:
     Human(const string & name = "", const int hp = 100, const int property = 0): _name(name), _hp(hp), _property(property) {}
     void Name() const {
            return _name;
        }
     void work(int salary) {
            _property += salary;
        }
};

class Hero : public Human {
  private:
     string _super_power;
    public:
     Hero(const string &name = "", const int hp = 100, const property = 0, const string & sp): Human(name, hp, property), _super_power(sp) {}
     string SuperPower() const {
            return _super_power;
        }
     void use_power() {
            cout << _super_power << endl;
        }
};

Hero hero("peter", 100, 0, "spider");
hero.Name();

在这个例子当中Name是父类Human当中定义的,但对于子类的对象来说,它一样有权限可以使用。

除此之外还有两个特殊的关系,首先是父类的指针可以不进行显式类型转换的情况下指向子类对象:

代码语言:javascript
复制
Hero spider("peter", 100, 100, "spider");
Human *h = &spider;

同样,父类引用也可以在不进行强制类型转换的情况下引用子类对象:

代码语言:javascript
复制
Human &sp = spider;

一般来说C++会要求引用和指针与实际获得的类型匹配,但对于继承类来说是一个例外。不过这种例外是单向的,也就是说我们只能用父类指针或引用去接收子类对象,反过来是不行的。

除了赋值的时候更加方便之外,我们在传参的时候也会更加方便。我们在接收函数的参数设置成父类,那么无论是父类还是子类的实例都可以传入。

代码语言:javascript
复制
void show(Human &h) {
    ...
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coder梁 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 继承(二)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档