首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

还是不太理解继承中的构造函数 再问一下,该怎么处理

2012-04-12 
还是不太理解继承中的构造函数 再问一下class Base{public:Base(int i){}}class Dervice:public Base{pub

还是不太理解继承中的构造函数 再问一下
class Base
{
public:
  Base(int i)
  {}
};

class Dervice:public Base
{
public:
  Dervice():Base(10){}//这个地方 是子类的初始化列表 这里写"Base(10)" 不就是对基类构造函数的调用吗?既然是对基类构造函数的调用 是否就说明了子类中继承了基类的构造函数呢?
};



[解决办法]

C/C++ code
#include <iostream>using namespace std;class base{    public:    base(int i):num(i){}    base(const base &orig):num(orig.num){}    base& operator = (const base &orig)    {        num = orig.num;        return *this;    }    private:    int num;};class derived:public base{    public:    derived(int a,int b):base(a),id(b)    {        //base::base(a);//或者换成base(a);<<----    base::base(a);测试是否被继承并应藏,base(a);测试是否被继承没有隐藏,结果全部编译错误        //id = b;    }    derived(const derived &orig):base(orig),id(orig.id)    {        //base::base(orig);//或者换成base(orig);<<-----同上,结果全部编译错误        //id = orig.id;    }    derived& operator = (const derived &orig)    {        base::operator = (orig);//<<--------通过,说明这个被继承但被隐藏        id = orig.id;        return *this;    }    private:    int id;};int main(){    return 0;}
[解决办法]
探讨
引用:
C/C++ code


#include <iostream>
using namespace std;
class base
{
public:
base(int i):num(i){}
base(const base &amp;amp;orig):num(orig.num){}
base&amp;amp; operator ……

[解决办法]
你可以这样理解的
构造函数是类类型实例化时用来初始化成员对象的,而对于派生类来说,继承了基类的东西,所以当派生类实例化时会调用派生类的构造函数来初始化数据成员,而继承又有public,private,protected,所以派生类的构造函数虽然继承了基类的数据成员,但是并不能完全的对其进行初始化,所以为了统一期间编译器“规定”派生类的构造函数首先调用父类得构造函数来初始化成员,这样就不会出现上述问题,
个人理解,希望有帮助与你...
[解决办法]
探讨
但是为什么基类的构造函数如果写成私有的 就不能被调用了呢 而受保护的基类构造函数就可以调用 难道说基类构造函数是在派生类的作用域中调用的是吗???

[解决办法]
还有,初始化列表的方式,和我们平常的调用还是有一定区别的。

热点排行
Bad Request.