C++ 类的继承中 构造函数的写法 和 继承类的使用

为什么要继承类

面向对象的编程的主要优点之一就是提供可重复的代码,而类的继承便是为了更好地实现这一优点,具体如何实现可以参考我的另外一篇文章 面向对象的优点以及原理的简单解释

如何继承一个类

关于如何继承一个类的前提自然是你首先得有一个父类,也可以被称作基类,没有这个东西就无谈继承,所以我们先假设我们拥有父类如下代码。

class Time {
public:
	Time() {
	}
	Time(const string &NowHour_, const string &NowMinute_) :NowHour(NowHour_), NowMinute(NowMinute_) {
	}

	string NowHour=" ";
	string NowMinute=" ";
	void ShowNowTime() {
		cout << NowHour << ":" << NowMinute;
	}
private:
	string Myname;
};

这就是一个简单的类,类名叫做Time,我们可以看到这个类有成员变量NowHour,NowMinute,却没有秒,我们想这个没有的时间好像有点不太完整,但是直接改上面的代码也不太好,万一有人就是需要不药的类呢?于是为了处于折中,我打算自已定义一个类,类名就叫myTime在我的类里,我想写啥就写啥吧!

但是我也不想重写上面的类,因为Time这个类里面有些功能我还是想要的,于是我就考虑继承这个类,myTime的代码如下

class myTime :public Time {
public:
	myTime(const string &NowHour_, const string &NowMinute_, const string &NowSecond_) :Time(NowHour_, NowMinute_),NowSecond(NowSecond_) {
	
	}
	string NowSecond;
	void ShowNowTime2() {
		cout <<NowHour << ":" << NowMinute << ":" << NowSecond << endl;
	}
};

分析一下上面的代码 myTime是我自己的类名 public表示的是公有派生,类似的关键词还有protect,private

然后我们看下面这一行函数

myTime(const string &NowHour_, const string &NowMinute_, const string &NowSecond_) :
Time(NowHour_, NowMinute_),NowSecond(NowSecond_) {
}

表示的是myTime的构造函数,对于被派生的类的构造函数有几个需要注意的地方

  1. 被派生的类mytime不仅需要给他新定义的成员如NowSecond初始化赋值,还需要给Time内原有的成员变量赋值
  2. 给原有的基类的成员变量赋值方式为在构造函数后面加上:Time(NowHour_, NowMinute_),不能在构造函数的大括号{}中添加,如果没有加:Time(NowHour_, NowMinute_),则其会默认为:Time()

继承类(派生类)的使用

  1. 继承类可以调用父类(基类)的非(private修饰的)函数
    mytime1.ShowNowTime();
    
  2. 基类指针可以在不进行显式类型转换的时候指向派生类的对象,但只能调用基类的方法
  3. 基类引用可以在不进行显式类型转换的时候引用派生类对象,但只能调用基类的方法
    看到上面三条同学们可能已经有点懵了,都是啥和啥,我这里简单口语化的讲解一下
    第一条表示,儿子可以用老子的东西,继承类可以调用父类的函数
    第二条第三条其实讲的是类似的东西,就是父亲可以代表儿子,父类的指针可以直接指向子类的指针
    如下代码所示
    //time2 是Time类的对象
    //mytime1 是myTime类的对象
    Time * time2;
    time2 = &mytime1;
    time2->ShowNowTime();//合法
    time2->ShowNowTime2();//不合法
    

上述中ShowNowTime()是基类函数,可以调用ShowNowTime()2是继承类函数不可以被调用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值