c++之继承的简单介绍(1:继承的概念及定义 2:基类和派生类切割和隐藏 3:继承与友元 4:继承与静态成员)

以下是阿鲤对c++中继承学习的总结,希望对大家有所帮助;若有误请慷慨指出。

1:继承的概念及定义

2:基类和派生类切割和隐藏

3:继承与友元

4:继承与静态成员

5:派生类默认函数成员


一:继承的概念及定义:

1.1:继承的概念

继承的出现是为了增加面向对象程序语言的代码复用性;它允许程序员在原来的类(基类)上进行扩展、曾强功能,从而产生一个新的类(派生类);继承是类设计层次的复用。

eg:

using namespace std;
class BasicTest//基类
{
};
class Test:public BasicTest//派生类
{
};
int main()
{
	return 0;
}

1.2:继承的定义

    1.2.2:继承的格式:

    1.2.3:继承关系和访问限定符

继承分为public继承,private继承,protected继承;

访问限定符分为public访问,private访问,prouected访问;(指基类中的成员权限)

所以继承方式和访问权限可组成九种访问模式,如下表

其实对于这张表的总结只需要一句话:权限取小

eg:

#include<iostream>

using namespace std;
class BasicTest
{
public:
	int m_a;
private:
	int m_b;
protected:
	int m_c;
};

class Test : public BasicTest
{
public:
	Test()
	{
		m_a = 3;
		m_b = 4;
		m_c = 5;
	}
};


int main()
{
	Test t;
	t.m_a;
	t.m_b;
	t.m_c;
	system("poause");
	return 0;
}

 

由上面的例子我们便可看出,m_a是派生类中的public成员, m_b在派生类中不可访问, m_c是派生类中的private成员。

 

二:基类和派生类切割和隐藏

首先请看一个例子

eg:

#include<iostream>

using namespace std;
class BasicTest
{
public:
	int m_a;
	void fun()
	{
		cout << "father" << endl;
	}
};

class Test : public BasicTest
{
public:
	int m_a;
	void fun(int a = 4)
	{
		cout << "sun" << endl;
	}
};

如上面的例子,因为基类和派生类中都存在fun函数和变量m_a,所以在派生类中基类的fun函数和变量m_a均被隐藏,在类外使用派生类所实例化的对象是都针对的是派生类中的成员。那么是不是在派生类中不能访问到基类中的成员吗?

当然不是了,只需要加上作用域限定符::即可。如下


class Test : public BasicTest
{
public:
	int m_a;
	void fun(int a = 4)
	{
		BasicTest::m_a = 7;
		cout << "sun" << endl;
	}
};

当然还有其他的方式可以通过派生类访问基类的成员,那就是切割:

由类继承的定义我们不难看出派生类的范围是大于基类的范围的,所以我们看可以通过指针的强制转换由派生类访问基类,如下。

#include<iostream>

using namespace std;
class BasicTest
{
public:
	int m_a;
	void fun()
	{
		cout << "father" << endl;
	}
};

class Test : public BasicTest
{
public:
	int m_a;
	void fun(int a = 4)
	{
		BasicTest::m_a = 7;
		cout << "sun" << endl;
	}
};


int main()
{
	Test *pt = new Test;
	BasicTest *bpt = (BasicTest *)pt;
	bpt->fun();
	system("pause");
	return 0;
}

结果:打印father

注意:不能使用强制转化将基类转化成派生类,因为派生类的范围大于基类,所以派生类的空间大于基类;若使用强制转换便会出现内存越界的情况。

 

三:继承与友元

友元关系不能被继承:,也就是说基类友元不能访问子类私有和保护成员(可以这样理解,你爸爸的朋友不是你的朋友)。

 

四:继承与静态成员

基类定义了static静态成员,则整个继承体系里面只有一个这样的成员。无论派生出多少个子类,都只有一 个static成员实例 。

eg:

#include<iostream>

using namespace std;

class test1
{
	public:
	static int m_a;
};
int test1::m_a = 8;
class test2 : public test1
{

};
class test3 : public test2
{

};

int main()
{
	test3::m_a = 666;
	cout << test1::m_a << endl;
	system("pause");
	return 0;
}

输出为666。

 

五:派生类默认函数成员

六大默认功能
默认构造初始化
拷贝构造使用同类对象初始化
析构清理
赋值运算符重载把一个对象赋值给另一个对象
&运算符重载取地址
const &运算符重载const取地址

在这里要重点说的是派生类中,构造和拷贝构造的顺序;

构造:先基类后派生类

析构:先派生类后基类

好了以上就是阿鲤对继承学习的全部总结啦。

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值