鱼C论坛

 找回密码
 立即注册
查看: 4409|回复: 3

子类的构造函数的参数 必须和基类的构造函数的参数相同吗?

[复制链接]
发表于 2016-1-2 16:04:36 | 显示全部楼层 |阅读模式
20鱼币
子类的构造函数的参数 必须和基类的构造函数的参数相同吗?

最佳答案

查看完整内容

既然是派生类 那么派生类和基类一定是一个is-a关系或者是has-a的关系 语法上可以你在派生类中完全不管基类的定义, 继承过来后而重新对所有数据成员完全重新赋值, 行为上这看起来完全像是重定义为另一个类, 和基类没啥关系 这合法(语法) 但不合理, 既然是基类和派生类, 至少其中一点一定是肯定的, 基类有的, 子类也都应该有, "派生类应通过使用基类构造函数尊重基类的初始化意图, 而不是在派生类构造函数函数体中对这些成 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-1-2 16:04:37 | 显示全部楼层
本帖最后由 ryxcaixia 于 2016-1-5 11:08 编辑
  1. class  fulei
  2. {
  3. public:
  4.         std::string w;
  5.         fulei(std::string theName)
  6.         {
  7.                 w=theName;
  8.         }

  9. protected:
  10. private:
  11. };

  12. class MyClass :public fulei
  13. {
  14. public:
  15.         MyClass(std::string theName): fulei(theName) {}


  16. private:

  17. };
复制代码


既然是派生类 那么派生类和基类一定是一个is-a关系或者是has-a的关系
语法上可以你在派生类中完全不管基类的定义, 继承过来后而重新对所有数据成员完全重新赋值, 行为上这看起来完全像是重定义为另一个类, 和基类没啥关系
这合法(语法) 但不合理, 既然是基类和派生类, 至少其中一点一定是肯定的, 基类有的, 子类也都应该有,

"派生类应通过使用基类构造函数尊重基类的初始化意图, 而不是在派生类构造函数函数体中对这些成员赋值"
具体详见c++primer 第四版p493 关键概念:尊重基类接口
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-1-3 18:35:57 | 显示全部楼层
不需要,子类继承了基类的参数,同时也可以添加自己的参数,只是继承的参数不必再写一遍而已
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-1-3 20:02:11 | 显示全部楼层
本帖最后由 y290176346 于 2016-1-3 20:03 编辑
丿fun 发表于 2016-1-3 18:35
不需要,子类继承了基类的参数,同时也可以添加自己的参数,只是继承的参数不必再写一遍而已

  1. class Lovers
  2. {
  3. public:
  4.     Lovers(std::string theName);
  5.     void kiss(Lovers *lover);
  6.     void ask(Lovers *lover, std::string something);

  7. protected:
  8.     std::string name;

  9.     friend class Others;    // 祸根,交友不慎。。。。。。
  10. };

  11. class Boyfriend : public Lovers
  12. {
  13. public:
  14.     Boyfriend(std::string theName);
  15. };
复制代码

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1. class  fulei
  2. {
  3. public:
  4.         std::string w;
  5.         fulei(std::string theName)
  6.         {
  7.                 w=theName;
  8.         }

  9. protected:
  10. private:
  11. };
  12. class MyClass :public fulei
  13. {
  14. public:
  15.         MyClass(std::string theName)
  16.         {

  17.         }
  18. private:

  19. };
复制代码

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
为什么第一个编译能通过  第二个就通过不了呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-21 17:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表