第3章 继承与派生的访问规则

前言

继承与派生之间的访问规则到底是怎样的??还在啥啥分不清,今天总算撸出一篇文章总结出来了。

【例5.1】使用继承的案例

//【例5.1】使用继承的案例
#include 
#include 
using namespace std;
class Person{	//声明基类
	public:
		Person(string name1,string id_number,int age1);
		~Person();
		void show();	//在基类中定义了成员函数show()
	private:
		string name;	//姓名
		string id_number;	//身份证号
		int age;	//年龄
};
Person::Person(string name1,string id_number1,int age1)
{
	name=name1;
	id_number=id_number1;
	age=age1;
}
Person::~Person()
{
}
void Person::show()
{
	cout<<"\n 姓名:"<

输出

第3章 继承与派生的访问规则_第1张图片

公有继承的访问规则
基类成员 私有成员 公有成员 保护成员
内部访问 不可访问 可访问 可访问
对象访问 不可访问 可访问 不可访问

公有派生的对象可以访问基类的公有成员

基类成员在派生类中的访问属性

基类中的成员 继承方式 基类成员在派生类中的访问属性
私有成员(private) 公有继承(public) 不可直接访问
私有成员(private) 私有继承(private) 不可直接访问
私有成员(private) 保护继承(protected) 不可直接访问
公有成员(public) 公有继承(public) 公有(public)
公有成员(public) 私有继承(private) 私有(private)
公有成员(public) 保护继承(protected) 保护(protected)
保护成员(protected) 公有继承(public) 保护(protected)
保护成员(protected) 私有继承(private) 私有(private)
保护成员(protected) 保护继承(protected) 保护(protected)

 【例5.2】一个私有继承的例子

//【例5.2】一个私有继承的例子
#include 
#include 
using namespace std;
class Person{	//声明基类
	public:
		Person(int age1)
		{	age=age1;	}
		void setage(int age1)
		{	age=age1;	}
		void show();	//在基类中定义成员函数show()
	private:
		int age;		//年龄
};
void Person::show()
{
	cout<<"年龄:"<

正确输出

第3章 继承与派生的访问规则_第2张图片

加上语句“stu1.Person::show(); ”编译提示

私有继承的访问规则
基类成员 私有成员 公有成员 保护成员
内部访问 不可访问 可访问 可访问
对象访问 不可访问 不可访问 不可访问

          私有派生的对象不可以访问基类的任何成员 

【例5.3】基类中的保护成员以私有的方式被继承后的访问属性

//【例5.3】基类中的保护成员以私有的方式被继承后的访问属性
#include 
#include 
using namespace std;
class Person{	//声明基类
	public:
		Person(int age1)
		{	age=age1;	}
		void setage(int age1)
		{	age=age1;	}
		void show();	//在基类中定义成员函数show()
	protected:
		int age;		//年龄
};
void Person::show()
{
	cout<<"年龄:"<

第3章 继承与派生的访问规则_第3张图片

基类中的保护成员以私有的方式被继承后可以在派生类中直接被访问,而私有成员只能间接访问(即通过基类中的公有成员函数访问)。

保护继承的访问规则
基类成员 私有成员 公有成员 保护成员
内部访问 不可访问 可访问 可访问
对象访问 不可访问 不可访问 不可访问

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

总结

继承是个啥?到底有啥用?

简单来讲就是子承父类,用csgo里的话讲就是父枪子承!就是提高了代码的利用率,让代码可以重新被利用。

关于父类和子类之间的访问属性傻傻分不清?

  1. 首先,私有成员(private)只要在本类外无论怎样都不能被直接访问!!它们只能在本类中被访问,或者通过本类的公有函数接口来访问。即既不能被本类对象直接访问,也不能在派生类中被直接访问。
  2. 再来说保护成员(protected),保护成员与私有成员的
    1. 相同点是:它们都不能被本类的对象直接访问!!  ,更不能被派生类的对象访问  
    2. 不同点是:保护成员可以在派生类的内部中(无论是什么继承属性,就算是私有继承)被直接访问!!而基类的私有成员被继承(无论是什么继承,就算是公有继承也一样)过来不能在派生类中直接被访问。要想在派生类的内部访问基类的私有成员,只能通过基类的公有或保护成员函数做为接口来访问。
  3. 公有成员(public),公有成员可以被本类的对象直接访问,也可以在派生类的内部被直接访问。也可以被公有派生类的对象直接访问。
  4. 要想通过派生类的对象访问基类中的成员,那只能是公有派生对象访问基类的公有成员。
  5. 要想在派生类的内部直接访问基类中的成员,那只能直接访问基类的公有成员和保护成员

下面的自撸代码例子可以说明我的总结

#include 
using namespace std;
class Base{
	public:
		int a;
	protected:
		int b;
	private:
		int c;
};
class Derived:private Base{	//私有继承
	void show()
	{
		cout<

如有错误,欢迎广大朋友前来批评指正!! 

你可能感兴趣的:(c++面向对象程序设计,c++,面向对象程序设计)