继承:使程序代码的重用度大幅度地提高了,而C++对继承有很好的支持,
基类对象不能给子类对象赋值,因为基类中的数据不充分,不含有子类全部的信息,
但是子类对象可以给基类对象赋值。
如下图所示:
例如:
student是一类,GraduateStudent是student的子类,那么
GraduateStudent gs;
Student* p = &gs;
由于p是Student指针,指向GraduateStudent对象gs的首地址,它恰好也是其中Student对象部分的首地址。
因为研究生也是学生,所以研究生对象gs赋值给s也是合理的。它裁去了专属研究生的部分,而且将研究生对象的地址赋给学生指针p也是合理的,由于学生对象地址和研究生对象地址重合,所以,p指针若转换为研究生类型是:
GraduateStudent* pGs = reinterpret_cast<GraduateStudent*>(p);
便无需修改地址就可以操作研究生了,这种reinterpret_cast转换,纯粹是地址不变而指针类型改变,即指针操作的意义改变。但前提是学生对象与研究生对象地址重合。
1. 覆盖父类操作
如果父类中有一个操作,在子类中没有重新定义,则子类可以沿用该操作,但都是父类操作。例如下列程序中,研究生类GraduateStudent继承了Student类,对象gs在显示其本人信息时,没有办法显示相关的研究生信息。这主要是GraduateStudent类中没有重载display成员函数,为了准备使用GraduateStudent类,需要在GraduateStudent类中把父类中的display成员函数进行覆盖。
#include <iostream>
#include <string>
using namespace std;
class Advisor
{
int noOfMeeting;
};
class Student
{
string name;
int semesterHours;
double average;
public:
Student(string pName = "noName")
{
name = pName;
average = 0;
semesterHours = 0;
}
void addCourse(int hours, double grade)
{
double totalGrade = (semesterHours * average + grade);
semesterHours += hours;
average = semesterHours ? totalGrade / semesterHours : 0;
}
void display()
{
cout << "name=\"" << name << "\"" << ", hours=" << semesterHours << ", average=" << average << endl;
}
int getHours()
{
return semesterHours;
}
double getAverage()
{
return average;
}
};
class GraduateStudent : public Student
{
Advisor advisor;
int qualifierGrade;
public:
GraduateStudent(string pName = "noName"):Student(pName)
{
qualifierGrade = 0;
}
int getQualifier()
{
return qualifierGrade;
}
void display()
{
Student::display();
cout << "qualifierGrade=" << qualifierGrade << endl;
}
};
int main()
{
Student ds("Lo lee undergraduade");
GraduateStudent gs("WU fantasy");
ds.addCourse(3, 2.5);
ds.display();
gs.addCourse(3, 3.0);
gs.display();
return 0;
}
2. 同化效应
在上述代码中,GraduateStudent类继承了Student类,当以自己的身份表现时,显示了自身的特色。但是,当以研究生对象复制(传递)给学生时,研究生的个性消失了,如下代码所示:
void fun(Student& x)
{
x.display();
}
int main()
{
Student s("Lo lee undergraduate");
GraduateStudent gs("John");
fun(s);
fun(gs);
return 0;
}
代码输出如下:
name="Lo lee undergraduate", hours=0, average=0
name="John", hours=0, average=0
从输出结果可以看出,Student类对象s和GraduateStudent类对象gs作为参数传递给fun函数时,gs在fun函数中并不被看作为研究生,而被看作Student类对象进行操作。
分享到:
相关推荐
在C++编程语言中,多继承是一种特性,允许一个派生类从多个基类继承属性和行为。这个特性使得代码重用更为灵活,但同时也带来了潜在的问题,...通过学习和实践"**C++多继承Demo**",我们可以更好地理解和掌握这些概念。
在C++编程语言中,封装、...通过学习和实践这些例子,开发者能够更好地理解和掌握C++的面向对象编程技巧,从而编写出更高效、更易于维护的代码。在实际开发中,封装、继承和多态是设计模块化、可扩展系统的关键工具。
C++继承是面向对象编程(OOP)中的一个核心概念,它允许我们创建新的类,这些新类可以...通过学习这个视频教程,你将更好地理解C++继承的概念,并能熟练地在Qt开发中应用这些知识,创建出功能丰富、结构清晰的程序。
这份"C++学习笔记"涵盖了C++的基础到高级概念,旨在帮助初学者和有一定经验的程序员深入理解并掌握C++。 在C++的学习过程中,以下几个关键知识点是不可或缺的: 1. **基础语法**:C++起源于C语言,因此它保留了...
本“C++学习课件PPT”旨在为大二学生或其他初学者提供一个详尽的C++编程学习资源。 首先,C++的基础部分包括语法、变量、数据类型、运算符、流程控制(如if语句、switch语句、for循环、while循环)以及函数的使用。...
"C++学习实例"这个压缩包文件正是为初学者提供了一系列精心设计的练习,旨在帮助他们逐步理解并熟练运用C++。 首先,我们要了解C++的基本概念。C++是C语言的增强版,引入了面向对象编程(OOP)的概念,包括类、对象...
总的来说,《C++学习书籍宝典》中的《C++面向对象程序设计》是初学者踏上C++编程之路的理想起点。通过系统的学习和不断的实践,读者将能够逐步掌握C++这一强大工具,为未来的编程生涯打下坚实基础。
在C++中,多态性是面向对象编程的三大特性之一,另外两个是封装和继承。多态性允许不同的对象对同一消息做出不同的响应,实现灵活和通用的代码设计。C++支持两种类型的多态:静态多态(编译时多态)和动态多态(运行...
通过以上知识点的学习,您可以理解并运用C++类继承来设计更高效、可维护的代码。如果在实践中遇到任何疑问,可以通过提供的源代码与作者沈继功联系,以获得进一步的帮助和指导。在实际编程中,理解和掌握这些概念将...
可见性继承比较简单,而虚拟继承对学习c++的难度较大。 首先,虚拟继承与普通继承的区别有: 假设derived 继承自base类,那么derived与base是一种“is a”的关系,即derived类是base类,而反之错误; ...
作为C++的学习资源,《明日科技丛书》中的C++学习PPT提供了深入理解这种语言的基础和进阶知识。 C++的核心特性包括面向对象编程(OOP)、模板、异常处理和STL(Standard Template Library,标准模板库)。以下是...
《C++编程思想》是C++领域的经典之作,由Bruce Eckel撰写,旨在帮助程序员深入理解和掌握C++这一强大而复杂的编程语言。这本书分为多个章节,涵盖了C++的基础概念、核心特性以及高级主题,旨在系统地指导读者进行C++...
这份"丰富的C++学习材料资源"涵盖了学习C++所必需的各种资料,可以帮助初学者逐步掌握这个语言的核心概念和高级特性。 首先,C++的基础部分包括语法、数据类型、控制流(如if语句、循环)、函数、数组和指针等。...
讲述在c++中关于继承与派生的基础方法,用于初学者进行学习
在C++编程语言中,多重继承是一种特性,允许一个派生类从多个基类中继承属性和行为。这种设计模式增强了代码的复用性,并且能够构建复杂的类层次结构。以下是一个关于如何实现C++类的多重继承的详细解释。 首先,让...
本教程“C++学习教程-PPT.zip”旨在引导初学者逐步掌握C++的核心概念和技能。 C++起源于C语言,由Bjarne Stroustrup在1983年为了增强C语言的功能而设计。它不仅保留了C语言的高效性和灵活性,还引入了类、继承、...
《C++学习笔记》是一部非常实用的资源,适合那些对C++编程语言有着浓厚兴趣或者正在学习C++的初学者。这份笔记详细介绍了C++语言的基础知识、核心概念以及高级特性,旨在帮助读者掌握C++编程的核心技能。 C++是...
### C++的学习感想 在IT领域中,C++是一种被广泛应用且功能强大的编程语言,它不仅继承了C语言的基础语法特性,还引入了许多高级概念和技术,如面向对象编程(OOP)和模板编程等。本文将围绕“C++的学习感想”这一...
通过创建类来抽象现实世界中的实体,利用继承实现代码复用,以及通过多态实现更灵活的设计,是C++强大之处。理解这些概念不仅有助于编写更高效、可维护的代码,也是面试中常被考察的点。 在C++中,内存管理是另一个...
C++随堂测试(继承、多态、重载) 本资源摘要信息涵盖了C++编程语言中三个重要的概念:继承、多态和重载。...本资源摘要信息涵盖了C++编程语言中继承、多态和重载三个重要概念的知识点,对于学习C++的读者非常有帮助。