c++继承理解

继承:
1、子类继承父类时候,在子类的构造函数初始化列表中需要显示调用父类的构造函数来初始化父类的成员信息,以至于初始化整个子类信息。但是有些情况可以不不用显示调用,如父类中的构造函数为默认构造函数或者父类中的构造函数为参数默认值的时候,子类在构造函数时候回默认去调用父类的构造。同时还需要显示初始化子类包含的对象成员,私有变量成员等
2、c++中的关系和联系只会存在于子类和父类之间,孙子和爷爷之间不需要考虑关系,而是通过儿子和爷爷之间的关系来解决的。所以从关系上讲只会处理两代之间的关系。
3、子类中一定要在初始化列表中初始化子类中定义的非标准类型的(比如某个类类型的变量)的变量
4、子类的构造顺序是:其实是通过初始化列表的顺序来确定的,顺序为先父类构造初始化->再到子类包含的成员对象的初始化->再到子类自己的构造函数初始化。其实不管子类中这个对象变量是否放在初始化列表(不放在初始化列表的场景是对象变量存在默认构造函数)都是这个顺序。
5、子类对父类的继承可以理解为什么都可以继承,就只有构造函数,拷贝构造函数,析构函数不能被继承。
6、子类的拷贝构造函数和赋值重载运算是这样的:比如
Child g;
Child gg = g;这个使用的重载=运算符赋值的。=号重载的格式如:Student& Student::operator = (const Student &another),里面的实现和拷贝构造函数的实现一样,this->xxx=another.xxx这样的方式赋值即可。
或者Child gg(g);这个是使用拷贝构造函数赋值的
此时在g赋值给gg过程中,回首先调用gg的赋值构造函数,然后gg的赋值构造函数在调用gg父类的拷贝构造函数。此时gg子类的拷贝构造函数应该这样写:
Child::Child(const Child & another):Father(another),子类变量(i). /这里需要通过初始化列表的方式进行拷贝构造函数的调用,拷贝构造函数的格式为 “类名(const 类名 & another)”/
{
}

这里的规则是这样的:
对应拷贝构造函数的规则
1、子类没有实现拷贝构造函数时都会默认调用父类的拷贝构造器(父类可以自己手动写了拷贝构造)所以不用显示调用
2、子类如果手动写了拷贝构造函数就需要显示调用父类的拷贝构造函数了,比如上面的例子说的。当然如果父类中没有手写拷贝构造函数则不需要在初始化列表中显示调用。
对于=号重载函数的规则
1、子类没有重载=号重载函数的话,两个对象赋值的时候会通过子类默认调用父类的默认=重载函数。这样达到赋值的效果。
2、一旦子类在类定义中重新写了=号重载函数的话,则就不会自动调用父类中的=号重载函数了。此时由于父类继承的东西都会继承到子类除了构造函数之类,所以=号重载函数也会继承到子类,因此在子类中的=号重载函数中手动调用父类的=号重载函数即可。比如在子类的=号重载函数体内执行:Base::oprerator=(another);这条语句即可。

7、构造函数的顺序是:父类->成员对象->自己构造
析构函数的顺序正好相反:自己析构->成员对象析构->父类析构。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值