提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
继承是C++的重要特性之一。我们对原有的类进行功能上各有侧重的扩充,可以形成多种多样的新类。这样的新类叫作原本类的派生类、子类,而原本类也相对叫作基类,父类。······················································································································
提示:以下是本篇文章正文内容,下面案例可供参考
一、继承
继承大大增加了增加了代码的复用性,帮助我们减少了许多重复的代码。并建立了类之间的联系,形成了一种逻辑层次关系。子类可以使用父类的成员,并在此基础上添加自己功能。但这种继承也不是简单的一概而论,子类并不能继承父类的全部功能。而继承方式也关乎着子类对父类的访问级别。和类的成员函数一样,继承方式也有 public protected private 三种。不同访问级别的成员和不同继承方式对子类中父类成员的访问级别的影响如下图:
public继承 | protected继承 | private继承 | |
public成员 | public | protected | private |
protected成员 | protected | protected | private |
private成员 | 子类无法访问 | 子类无法访问 | 子类无法访问 |
继承格式:class 子类名 :继承方式 父类名{};
同时也可以继承对个类,也就是成为多个父类的子类,只需将 继承方式 父类名用逗号隔开即可。
一个子类继承于一个父类,当我们定义一个子类对象的时候,编译器会先调用父类的构造函数,再调用子类的构造函数。相反,当我们的子类对象释放内存前,编译器会先调用子类的析构函数,再调用子类的析构函数。当我们设计子类构造函数的时候也应考虑到父类构造函数需要传递的参数(如果我们不想调用父类的默认构造函数),具体可以在子类构造函数初始化列表中添加 父类名(参数)的方式给父类构造函数传参。
二、函数遮掩和重现
子类和父类各有其独立的作用域,当我们在子类中定义了父类中的同名成员函数时,父类中的同名成员函数会失效,这就是函数遮蔽。一旦我们在子类中定义了父类的同名函数,不论父类中有几个同名函数,不论它们的参数是否相同,只要函数名称相同,就会被遮蔽。那么这种遮掩是绝对的吗?如果我们在子类的成员函数中使用 父类::函数名 来明确函数来源,那么就可以调用被遮掩的函数了。还有一种方法,在C++11中新增了using的功能,使其可以使父类被遮掩的函数在子类中重现(以重载的方式),但是必须要和子类的同名函数不同(参数不同,或者返回值不同),且继承方式为public或者protected。用法格式是:using 父类名::函数名;(在子类中使用)
总结
提示:这里对文章进行总结:
继承是面向对象程序设计的核心思想之一,我们应重视其与相关知识的结合,帮助我们更好的学习C++。