目录
引言
面向对象程序设计有4个主要特点:抽象、封装、继承和多态性。我们已经讲解了类和对象,了解了面向对象程序设计的两个重要特征一数据抽象与封装,已经能够设计出基于对象的程序,这是面向对象程序设计的基础。
要较好地进行面向对象程序设计,还必须了解面向对象程序设计另外两个重要特 征——继承性和多态性。本章主要介绍有关继承的知识,多态性将在后续章节中讲解。
继承性是面向对象程序设计最重要的特征,可以说,如果没有掌握继承性,就等于没有掌握类和对象的精华,就是没有掌握面向对象程序设计的真谛。
类之间的关系
has-A (包含关系)。用以描述一个类由多个“部件类”构成。实现has-A关系用类成员表示,即一个类中的数据成员是另一种已经定义的类。
uses-A(一个类部分地使用另一个类)。通过类之间成员函数的相互联系,定义友员或对象参数传递实现。
is-A (机制称为“继承”)。关系具有传递性,不具有对称性。
继承概念
派生类的继承语法
注意:C++中的继承方式(public、private、protected)会影响子类的对外访问属性。
举例说明,先定义一个父类:
class Parent
{
public:
void print()
{
a = 0;
b = 0;
cout<<"a"<<a<<endl;
cout<<"b"<<b<<endl;
}
int b;
protected:
private:
int a;
};
然后,定义一个子类来继承父类,这样就定义了一个继承的派生类:
class Child : public Parent
{
public:
protected:
private:
int c;
};
当然,继承分为三种继承,分别是公有,私有,和保护。举例的话,剩下的两种继承方式写法如下:
//class Child : private Parent
//class Child : protected Parent
子类可以访问父类的属性和方法
1、子类拥有父类的所有成员变量和成员函数
2、子类可以拥有父类没有的方法和属性
3、子类就是一种特殊的父类
4、子类对象可以当作父类对象使用
下面依旧沿用上节代码,来进行说明:
直接设定主函函数来进行调用:
void main11()
{
Child c1;
//成员变量
c1.c = 1;
c1.b = 3;
//成员函数
c1.print();
cout<<"hello..."<<endl;
system("pause");
return ;
}
c1是子类创建的对象,而c,a,b,原是在父类中定义的,该段程序可以完美运行,说明子类拥有父类的成员函数和成员变量及子类对象可以当作父类对象来使用。
但是,一定要注意,这些是同时受到父类的访问关键字的影响和子类的继承关键字的影响的!以上的案例,父类的访问关键字是"public",子类的继承方式也是公有继承,所以,可以达到以上的效果,如果改成私有的,则调用就不成功了。比如,变量"a"是父类中的私有成员,如果子类创建的对象去调用变量"a",是调用不成功的。
总体代码
dm01_继承的基本语法.cpp
#include <iostream>
using namespace std;
class Parent
{
public:
void print()
{
a = 0;
b = 0;
cout<<"a"<<a<<endl;
cout<<"b"<<b<<endl;
}
int b;
protected:
private:
int a;
};
//class Child : private Parent
//class Child : protected Parent public
class Child : public Parent
{
public:
protected:
private:
int c;
};
void main11()
{
Child c1;
//c1.c = 1;
//c1.a = 2;
c1.b = 3;
c1.print();
cout<<"hello..."<<endl;
system("pause");
return ;
}