C++ -- 类的继承和派生

1、派生类

派生类的声明

class 派生类名: 继承方式1 基类名1, 继承方式2  基类名2, ...., 继承方式n  基类名n
{
    派生类成员的声明;
};

例如:

class Mother
{
};
class Father
{
};
class Child:public Mother,public Father
{
public:
	Child();
	~Child();
}

基类Mother和Father是两个已有的类(这里只是声明),派生类Child是从已有的类产生新类

2、单继承和多继承

1)如果一个派生类只有一个基类,则叫做单继承。

2)一个派生类有多个基类,这叫多继承。这时,派生类就同时具有多个基类的特性。

3)当然一个基类也可以产生多个派生类。

在声明派生类时,除了要指明基类,还要指定继承方式。

继承方式限定了派生类访问基类成员的方式,指出了派生类成员或类外的对象对基类成员的访问权限

继承方式有:公有继承(public),保护继承(protected),私有继承(private)

如果没有显式的指定继承方式,默认为私有继承。(注意和struct的不同点)

3、继承过程

派生类从基类继承的过程可以分为3个步骤:

1)吸收基类成员--代码复用的过程

将基类成员中除了构造函数和析构函数外的所有其他成员全部接收。

注意:基类的构造函数和析构函数都不能被派生类继承。

2)修改基类成员

修改基类成员的方式有两种:

一种是通过设置派生类声明中的继承方式,来改变从基类继承的成员的访问属性。

一种是通过在派生类中声明和基类某个成员同名的成员。

3)添加派生类的新成员 ---(2)(3)是对原有代码的扩展。

代码的复用和扩展是继承和派生的主要目的。

派生类对基类成员的访问有两种:

--- 一种是派生类的新增成员对继承的基类成员的访问。

--- 另一种是派生类的对象对继承的基类成员的访问。

1)派生类的继承方式是public,即公有继承时:

对基类中的公有成员和保护成员的访问属性都不变,而对基类的私有成员则不能访问。

基类的公有成员和保护成员被继承到派生类中以后同样成为派生类的公有成员和保护成员。

派生类中的新增成员对它们可以直接访问。

通过对象访问类的成员属于外部访问,只能访问类的公有成员。

派生类的对象只能访问继承的基类公有成员。

不能访问保护成员和私有成员。新增成员也不能访问私有成员。

总的来说:

派生类新增成员可以访问基类:public,protected。

派生类的对象可以访问基类的:public。

基类的所有private成员都不能被派生类访问

2)派生类的继承方式是protected,即保护继承时:

基类的公有成员和保护成员被派生类继承后变成派生类的保护成员,而基类的私有成员在派生类中

不能访问。

派生类的新增成员可以访问基类的:public,protected。

派生类的对象不能访问基类的任何成员。

3)私有继承,private时:

基类的公有成员和保护成员被派生类继承后变成派生类的私有成员,基类的私有成员在派生类中不

能访问。

派生类的新增成员可以访问基类的:public,protected。

派生类的成员和对象都不能访问基类的private成员。

私有继承使得基类的成员在其派生类后续的派生中不能再被访问,终止了基类成员继续向下派生,

对代码的复用没有好处。

未指明继承方式时,默认是private。

举例:

class Base
{
public:
	void set_two(int a,int b)
	{
		x = a;
		y = b;
	}
	int get_x() { return x;}
	int get_y() { return y;}
private:
	int x;
	int y;
};
//私有继承
class Child:private Base
{
public:
	void set_three(int a,int b,int c)
	{
		set_two(a,b);
		z = c;
	}
	int get_x() { return Base::get_x();}
	int get_y() { return Base::get_y();}
	int get_z() { return z;}
private:
	int z;//新增私有数据成员
};
int main()
{
	Child child;
	child.set_three(1,2,3);
	cout<<"The data of child is:"<<endl;
	cout<<child.get_x()<<","<<child.get_y()<<","<<child.get_z()<<endl;
	system("pause");
	return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值