十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
C++继承的标准写法:
“专业、务实、高效、创新、把客户的事当成自己的事”是我们每一个人一直以来坚持追求的企业文化。 创新互联是您可以信赖的网站建设服务商、专业的互联网服务提供商! 专注于成都网站设计、成都网站制作、软件开发、设计服务业务。我们始终坚持以客户需求为导向,结合用户体验与视觉传达,提供有针对性的项目解决方案,提供专业性的建议,创新互联建站将不断地超越自我,追逐市场,引领市场!class BaseMonster { public: string name; string skill; uint32_t hp; void attack() { cout << "Base :: 发动***" << endl; } }; class RedDemonKing : public BaseMonster { } ;
解析:
① 类 RedDemonKing 集成了 类BaseMonster
② 集成的限定词为 public->
③ 对限定词的解析->
采用降级处理 : 级别从高到低(降序) public , protected , private 。如采用public,则基类中比public高的成员,全部降一级(因为没有比public高的级别 , 所以都不降级。但是protected的话 , 基类中的public在子类中的访问级别就降了一级变成protected)。
④ 如果省略继承的限定词,则默认为private限定词。
具体:
一,继承构造函数的调用顺序->先调用父类的构造函数,再调用子类(自己)的构造函数
1,当基类的构造函数为无参构造:
#includeusing namespace std; class BaseMonster { public: string name; string skill; uint32_t hp; void attack() { cout << "Base :: 发动***" << endl; } }; class RedDemonKing : public BaseMonster { } ; int main() { RedDemonKing rdk; rdk.name = "赤妖王"; cout << rdk.name << endl; return 0; }
2,当基类有有参数的构造函数时:
#includeusing namespace std; class BaseMonster { public: string name; string skill; BaseMonster( string name ) { this->name = name; } void attack() { cout << "Base :: 发动***" << endl; } }; class RedDemonKing : public BaseMonster { public: RedDemonKing( string name ) : BaseMonster(name) { this->skill = "会心一击"; } } ; int main() { RedDemonKing rdk("赤妖王"); cout << rdk.name << endl; return 0; }
解析:
① RedDemonKing( string name ) : BaseMonster(name) , 以此格式(参数列表)为调用基类构造。
二,覆盖
#includeusing namespace std; class BaseMonster { public: string name; string skill; BaseMonster( string name ) { this->name = name; } void attack() { cout << "Base :: 发动***" << endl; } }; class RedDemonKing : public BaseMonster { public: string name; RedDemonKing( string name ) : BaseMonster(name) { this->name = "赤妖王"; this->skill = "会心一击"; } } ; int main() { RedDemonKing rdk("妖怪"); cout << rdk.name << endl; cout << rdk.BaseMonster::name << endl; return 0; }
解析:
① 当子类和基类有相同名字的成员如上(name),那么子类的name就对积累的name形成了覆盖(相当与作用域)
② 默认取值 rdk.name , 取得是子类(自己)的值 。 如果要取基类的值需指定域 : rdk.BaseMonster::name
③ 重点 , 只要是名字一样都会形成覆盖,不存在重载:
要调用基类的函数 必须指定域
firend(友元)不能被继承( 可以这么理解 : 父亲的朋友 , 不一定是自己的朋友 )
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。