C++类的继承

C++类的继承

首先介绍一下类的三大特性继承多态封装。记住,要考的。

本文主要介绍类的继承。

继承(inheritance)是面向对象的主要特征之一,它使得一个类可以从现有类中派生,而不必重新定义一个新类。继承的实质就是用已有的数据类型创建新的数据类型,并保留已有数据类型的特点,以旧类为基础创建新类,新类包含了旧类的数据成员和成员函数,并且可以在新类添加新的数据成员和成员函数。旧类被称为基类或父类,新类被称为派生类或子类。

继承方式有3种派生类别,分别为公有(public)型、保护(protected)型和私有(private)型,访问控制修饰符也是public、protected、private 3种类型,成员声明列表中包含类的成员变量及成员函数,是派生类新增的成员。

类继承的形式如下:

class 派生类名:[继承方式] 基类名{
	...
}

“ : ”是一个运算符,表示基类和派生类之间的继承关系。如图所示:
基类派生类关系
下面以公有型派生方式继承为例做一个示范

1、创建一个存储姓名的基类CP1:

class CP1{
	public:
		char name[10];
		CP1(){
			memset(name,0,10);
		}
		void showname(){
			cout<<"Name     : "<<name<<endl; 
		}
};

2、创建一个存储密码的派生类CP2,继承CP1:

class CP2:public CP1{
	public:
		char password[20];
		CP2(){
			memset(password,0,20);
		}
		void showpassword(){
				cout<<"Password : "<<password<<endl;
		}
};

那么,CP2就是从CP1派生出的一个新类,新类中增加密码信息,姓名信息通过从CP1的继承获得。

基类派生类入门应用源代码:

#include<iostream>
#include<string.h>
using namespace std;
class CP1{
	public:
		char name[10];
		CP1(){
			memset(name,0,10);
		}
		void showname(){
			cout<<"Name     : "<<name<<endl; 
		}
};
class CP2:public CP1{
	public:
		char password[20];
		CP2(){
			memset(password,0,20);
		}
		void showpassword(){
				cout<<"Password : "<<password<<endl;
		}
};
int main(){
	
	CP2 p;
	strcpy(p.name,"zhai");
	strcpy(p.password,"abc123");
	p.showname();
	p.showpassword();
	
	return 0;
}

程序中CP1类是CP2类的基类,也就是父类。CP2类将继承CP1类的非私有成员。p对象初始化name、password成员后,调用了showname、showpassword函数,程序运行结果如下:
结果
tips:用户在父类中派生子类时,可能存在一种情况,即在子类中定义了一个与父类同名的成员函数,此时称为子类隐藏了父类的成员函数。

关于3种继承方式

1、公有型派生public

公有型派生表示对于基类的public数据成员和成员函数,在派生类中仍然是public;对于基类中的private数据成员和成员函数,在派生类中仍然是private。
例如:

class CP1{
	public:
		char name[10];
		CP1(){
			memset(name,0,10);
		}
		void showname(){
			cout<<"Name     : "<<name<<endl; 
		}
	privateint id;
};
class CP2:public CP1{
	public:
		char password[20];
		CP2(){
			memset(password,0,20);
		}
		void showpassword(){
				cout<<"Password : "<<password<<endl;
		}
};

CP2类无法访问CP1类的private数据成员 id。

2、私有型派生private

私有型派生表示对于基类的public、protected数据成员和成员函数,在派生类中可以访问;对于基类中的private数据成员和成员函数,在派生类中不可以访问。

3、保护型派生protected

保护型派生表示对于基类的public、protected数据成员和成员函数,在派生类中均为protected;对于基类中的protected数据成员和成员函数,在派生类的定义时可以访问,用派生类声明的对象不可以访问,也就是说在类体外不可以访问。protected成员可以被基类的所有派生类使用,这一性质可以沿继承树无限向下传播。

tips:因为保护类的内部数据不能被随意更改,实例类本身负责维护,这就起到了很好的封装性作用,把一个类分成两部分,一部分是公共的,另一部分是保护的,保护成员对于使用者来说是不可见的,也是不需了解的,这就减少了类与其他代码的关联程度。类的功能是独立的,它不依赖于应用程序的运行环境,既可以放到这个程序中使用,也可以放到别的程序使用,这样就能非常容易的使一个类替换另一个类。类访问限制的保护机制使人们编制的程序更加可靠和易维护。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值