子类的构造函数的参数 必须和基类的构造函数的参数相同吗?
子类的构造函数的参数 必须和基类的构造函数的参数相同吗? 本帖最后由 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 关键概念:尊重基类接口 不需要,子类继承了基类的参数,同时也可以添加自己的参数,只是继承的参数不必再写一遍而已 本帖最后由 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]