y290176346 发表于 2016-1-2 16:04:36

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

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

ryxcaixia 发表于 2016-1-2 16:04:37

本帖最后由 ryxcaixia 于 2016-1-5 11:08 编辑

classfulei
{
public:
        std::string w;
        fulei(std::string theName)
        {
                w=theName;
        }

protected:
private:
};

class MyClass :public fulei
{
public:
        MyClass(std::string theName): fulei(theName) {}


private:

};

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

"派生类应通过使用基类构造函数尊重基类的初始化意图, 而不是在派生类构造函数函数体中对这些成员赋值"
具体详见c++primer 第四版p493 关键概念:尊重基类接口

丿fun 发表于 2016-1-3 18:35:57

不需要,子类继承了基类的参数,同时也可以添加自己的参数,只是继承的参数不必再写一遍而已

y290176346 发表于 2016-1-3 20:02:11

本帖最后由 y290176346 于 2016-1-3 20:03 编辑

丿fun 发表于 2016-1-3 18:35
不需要,子类继承了基类的参数,同时也可以添加自己的参数,只是继承的参数不必再写一遍而已

class Lovers
{
public:
    Lovers(std::string theName);
    void kiss(Lovers *lover);
    void ask(Lovers *lover, std::string something);

protected:
    std::string name;

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

class Boyfriend : public Lovers
{
public:
    Boyfriend(std::string theName);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
classfulei
{
public:
        std::string w;
        fulei(std::string theName)
        {
                w=theName;
        }

protected:
private:
};
class MyClass :public fulei
{
public:
        MyClass(std::string theName)
        {

        }
private:

};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
为什么第一个编译能通过第二个就通过不了呢?
页: [1]
查看完整版本: 子类的构造函数的参数 必须和基类的构造函数的参数相同吗?