IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++笔记(十)之核心编程(六)继承 -> 正文阅读

[C++知识库]C++笔记(十)之核心编程(六)继承

继承

一.继承的基本语法

  • 继承的好处:减少重复代码
  • 语法:class? 子类 :继承方式? 父类

class java :?public backpage

  • 子类? ?也称为? ?派生类
  • 父类? ?也称为? ?基类

二.继承的方式

  1. 公共继承
  2. 保护继承
  3. 私有继承

?

#include<iostream>
#include<string.h>
using namespace std;

class base
{
public:
	int m_a;
protected:
	int m_b;
private:
	int m_c;
};

class son1 :public base
{
public:
	void fun()
	{
		m_a = 10;//父类的公共权限   子类还是公共权限
		m_b = 10;//父类的保护权限   子类还是保护权限
      //m_c = 10;//父类的私有权限   子类还是访问不到
	}
};

class son2 :protected base
{

protected:
	void fun()
	{
		m_a = 10;//父类的公共权限   子类是保护权限
		m_b = 10;//父类的保护权限   子类还是保护权限
	  //m_c = 10;//父类的私有权限   子类还是访问不到
	}
};

class son3 :private base
{

private:
	void fun()
	{
		m_a = 10;//父类的公共权限   子类是私有权限
		m_b = 10;//父类的保护权限   子类还是私有权限
	  //m_c = 10;//父类的私有权限   子类还是访问不到
	}
};
void test01()
{
	son1 s1;
	s1.m_a = 100;
	//s1.m_b;  son1 中  m_b是保护权限,类外访问不到
}
void test02()
{
	son2 s2;
	//s2.m_a = 10;  父类中是公共权限   到子类中变成了保护权限,类外访问不到了
	//s2.m_b = 10;  父类中是保护权限   到子类中还是保护权限,类外访问不到了
}

void test03()
{
	son3 s3;
	//s3.m_a = 10;  父类中是公共权限   到子类中变成了保护权限,类外访问不到了

}
int main()
{
	test01();
	system("pause");
	return 0;
}

三.继承中的对象模型

私有成员只是被隐藏了,但是还是会继承下去,所以子类的对象包过它自己本身的外,还包含父类中继承的,非隐藏的加隐藏的。?

四.继承中的构造函数和析构函数

子继承父类后,当创建类对象的时候(参照析构函数和构造函数

  • 构造函数:父类构造函数先有??
  • 析构函数:? ?子类析构函数先出
#include<iostream>
#include<string.h>
using namespace std;

class base
{
public:
	base()
	{
		cout << "父类的构造函数" << endl;
	}
	~base()
	{
		cout << "父类的构造函数" << endl;
	}
	int m_a=0;
protected:
	int m_b;
private:
	int m_c;
};

class son1 :public base
{
public:
	son1()
	{
		cout << "子类的构造函数:" << endl;
	}
	~son1()
	{
		cout << "子类的析构函数:" << endl;
	}
	int m_d;
};

void test01()
{
	son1 s1;
}
int main()
{
	test01();
	system("pause");
	return 0;
}

五.继承同名成员处理方式

  • 访问子类中同名函数? 直接访问即可
  • 访问父类同名函数? 需要加作用域
#include<iostream>
#include<string.h>
using namespace std;

class base
{
public:
	void fun()
	{
		cout << "访问的是父类!" << endl;
	}
	int m_a=10;
protected:
	int m_b;
private:
	int m_c;
};

class son1 :public base
{
public:
	void fun()
	{
		cout << "访问的是子类!" << endl;
	}
	int m_a=20;
};

void test01()
{
	son1 s1;
	cout << "子类中的 s1.m_a=" << s1.m_a << endl;
	//如果通过子类对象 访问到父类中同名成员,需要加作用域
	cout << "父类中的 s1.m_a=" << s1.base::m_a << endl;
	s1.fun();
	//如果通过子类对象 访问到父类中同名函数,需要加作用域
	s1.base::fun();
}
int main()
{
	test01();
	system("pause");
	return 0;
}

六.继承同名静态成员处理方式

静态成员和非静态成员出现同名,处理方式一样

  • 访问子类中同名函数? 直接访问即可
  • 访问父类同名函数? 需要加作用域

静态成员有两种访问方式

  • 通过对象来访问数据
  • 通过类名来访问数据

?//第一个“::”代表通过类名方式访问,第二个“::”代表访问父类作用域
?? ?cout << "父类下的m_a=" << son1::base::m_a << endl;

#include<iostream>
#include<string.h>
using namespace std;

class base
{
public:
	static void fun()
	{
		cout << "父类的调用" << endl;
	}
	static int m_a;
};
int base::m_a = 10;//类内申明  类外初始化

class son1 :public base
{
public:
	static void fun()
	{
		cout << "子类的调用" << endl;
	}
	static int m_a;
};
int son1::m_a = 20;

void test01()
{
	//通过对象来访问数据
	cout << "通过对象访问:" << endl;
	son1 s1;
	cout <<"子类的s1.m_a=" << s1.m_a << endl;
	cout << "父类的s1.m_a=" << s1.base::m_a << endl;
	//通过类名来访问数据
	cout << "通过类名访问:" << endl;
	cout << "子类下的m_a=" << son1::m_a << endl;
    //第一个“::”代表通过类名方式访问,第二个“::”代表访问父类作用域
	cout << "父类下的m_a=" << son1::base::m_a << endl;
}
void test02()
{
	//通过对象来访问数据
	cout << "通过对象访问:" << endl;
	son1 s;
	s.fun();
	s.base::fun();
	//通过类名来访问数据
	cout << "通过类名访问:" << endl;
	son1::fun();
	son1::base::fun();
}
int main()
{
	//test01();
	test02();
	system("pause");
	return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-25 12:21:44  更:2021-10-25 12:22:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:52:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码