c++学习(第15天)继承,多态(黑马程序员学习笔记)

本文详细介绍了C++中的继承概念,包括继承方式、构造与析构顺序、同名成员处理以及多继承语法。讨论了多态的静态和动态表现,通过计算器类、饮品制作和电脑组装三个案例展示了多态的应用。此外,还讲解了纯虚函数和虚析构函数在实现动态多态中的作用。
摘要由CSDN通过智能技术生成

继承

语法:

class A : public B;

A 类称为子类 或 派生类

B 类称为父类 或 基类

派生类中的成员,包含两大部分:

一类是从基类继承过来的,一类是自己增加的成员。

从基类继承过过来的表现其共性,而新增的成员体现了其个性

//公共页面
class BasePage
{
   
public:
	void header()
	{
   
		cout << "首页、公开课、登录、注册...(公共头部)" << endl;
	}

	void footer()
	{
   
		cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;
	}
	void left()
	{
   
		cout << "Java,Python,C++...(公共分类列表)" << endl;
	}

};

//Java页面
class Java : public BasePage
{
   
public:
	void content()
	{
   
		cout << "JAVA学科视频" << endl;
	}
};
//Python页面
class Python : public BasePage
{
   
public:
	void content()
	{
   
		cout << "Python学科视频" << endl;
	}
};
//C++页面
class CPP : public BasePage
{
   
public:
	void content()
	{
   
		cout << "C++学科视频" << endl;
	}
};

void test01()
{
   
	//Java页面
	cout << "Java下载视频页面如下: " << endl;
	Java ja;
	ja.header();
	ja.footer();
	ja.left();
	ja.content();
	cout << "--------------------" << endl;

	//Python页面
	cout << "Python下载视频页面如下: " << endl;
	Python py;
	py.header();
	py.footer();
	py.left();
	py.content();
	cout << "--------------------" << endl;

	//C++页面
	cout << "C++下载视频页面如下: " << endl;
	CPP cp;
	cp.header();
	cp.footer();
	cp.left();
	cp.content();


}

int main() {
   

	test01();

	system("pause");

	return 0;
}

继承方式

继承的语法:class 子类 : 继承方式 父类

继承方式一共有三种:

公共继承
保护继承
私有继承
class Base1
{
   
public: 
	int m_A;
protected:
	int m_B;
private:
	int m_C;
};

//公共继承
class Son1 :public Base1
{
   
public:
	void func()
	{
   
		m_A; //可访问 public权限
		m_B; //可访问 protected权限
		//m_C; //不可访问
	}
};

void myClass()
{
   
	Son1 s1;
	s1.m_A; //其他类只能访问到公共权限
}

//保护继承
class Base2
{
   
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;
};
class Son2:protected Base2
{
   
public:
	void func()
	{
   
		m_A; //可访问 protected权限
		m_B; //可访问 protected权限
		//m_C; //不可访问
	}
};
void myClass2()
{
   
	Son2 s;
	//s.m_A; //不可访问
}

//私有继承
class Base3
{
   
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;
};
class Son3:private Base3
{
   
public:
	void func()
	{
   
		m_A; //可访问 private权限
		m_B; //可访问 private权限
		//m_C; //不可访问
	}
};
class GrandSon3 :public Son3
{
   
public:
	void func()
	{
   
		//Son3是私有继承,所以继承Son3的属性在GrandSon3中都无法访问到
		//m_A;
		//m_B;
		//m_C;
	}
};

继承中构造和析构顺序

继承中 先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反

继承同名成员处理方式

当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据呢?

访问子类同名成员 直接访问即可
访问父类同名成员 需要加作用域
class Base {
   
public:
	Base()
	
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值