关于继承的那点事

本文通过具体代码示例详细解析了子类继承父类时构造函数的执行过程及成员变量初始化的问题,揭示了如何在子类中正确调用父类构造函数的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

子类继承父类的时候对于构造函数以及成员的探讨:


先进行代码分析:

.h文件:

#ifndef _0519001_H
#define _0519001_H


#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<iostream>


const int basemem = 3;


class base
{
public:
//base(){};
base(int tmp);
virtual void doprt();
protected:
int mem;
};


class sub:public base
{
public:
  sub();
virtual void doprt();
};

#endif


.cpp文件:

#include "0519001.h"
using namespace std;


base::base(int tmp)
{
this->mem = tmp;
cout<<"base mem is "<<this->mem<<endl; //base mem is 3
}


void base::doprt()
{
cout<<"base mem is: "<<this->mem<<endl;
}


/*
sub::sub()
{
cout<<"sub mem is ok" <<endl;
}
*/


sub::sub() : base(basemem)
{
//this->mem = 0;
cout<<"sub mem is "<<this->mem<<endl; //sub mem is 3
}




void sub::doprt()
{
cout<<"sub mem is: "<<this->mem<<endl; //sub mem is: 3
}


int main()
{
sub sub1;
sub1.doprt();
return 0;
}


1、构造函数的执行过程:

sub sub1; 在这儿的时候我们知道定义子类对象的时候会先调用父类的构造函数(注意是默认的构造函数),如果没有默认的构造函数或者想进行调用显示的构造函数怎么办呢?

此时我们就必须在子类构造函数的实现的时候加明需要显示调用的父类的哪个构造函数了。如:sub::sub() : base(basemem)

然后进行什么呢?

根据实践发现接下来是对子类的成员进行初始化(如果成员有对应的类变量还会进行调用其构造函数的),然后进行子类的构造函数。


2、子类继承父类的成员变量的初始值问题。



从运行的结果你是否会有这样的疑问:我没有对子类对象进行初始化变量mem的值,为什么子类的对象的值也是3?

因为在调用父类的构造函数的时候,显示的调用父类的base(basemem)构造函数,这样父类的mem成员变量就初始化为3了,子类继承这个变量的时候也就变成了3。


3、上述可以看出,子类可以向父类进行传值(传递变量当然也可以)。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值