首页 > 其他分享 >类与对象(二)

类与对象(二)

时间:2024-11-15 09:20:08浏览次数:1  
标签:对象 子类 class 继承 Base 父类 public

继承

继承的基本语法

class 子类(派生类):继承方式 父类(基类)

示例代码:

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

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

//公共页面
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;
	}
};

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

void test01()
{
	Java ja;
	ja.header();
	ja.footer();
	ja.left();
	ja.content();

	CPP cpp;
	cpp.header();
	cpp.footer();
	cpp.left();
	cpp.content();
}  

int main(){
	
	test01();

	system("pause");
	return 0;
}

继承方式

继承方式和访问权限控制相同,分为三种:
1.公共继承(public)
2.保护继承(protected)
3.私有继承(private)
大致继承关系如下:
image
可以大致理解为继承方式为子类从父类手中拿过来的起步权限。
对于父类中的private变量,子类无法获取。
对于public和protected变量,如果以public方式继承,则维持原样,如果以protected方式继承,则在子类中都变为protected,如果以private方式继承,则都变为private。相当于继承方式是他们的上限,和他们自身在父类中的权限取min即可。
示例代码:

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

class Base 
{
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;
};

class Son1 :public Base
{
public:

	void func()
	{
		m_A = 10;// 父类中的公共和保护权限成员,依然可以访问。
		m_B = 10;
		//m_C = 10;  //不可访问。
	}
};

class Son2 :protected Base
{
public:
	void func()
	{
		m_A = 100; //变为保护权限
		m_B = 100;
		//m_C = 100; 私有成员不可访问
	}
};

class Son3 :private Base
{
public:
	void func()
	{
		m_A = 100;
		m_B = 100;
		//m_C = 100; 私有成员不可访问
	}
};

void test01()
{
	Son1 s1;
	s1.m_A = 10;
	//s1.m_B = 10;//保护权限不可访问

	Son2 s2;
	//s2.m_A = 10;  //保护权限不可访问

	Son3 s3;
	//s3.m_A = 100;//私有权限不可访问
}  

int main(){
	
	test01();

	system("pause");
	return 0;
}

继承中的对象模型

继承的子类继承父类的所有属性,包括私有的属性,私有属性只不过被编译器隐藏,即编译器不允许你访问,但人家确实继承下来了。
示例代码:

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

class Base 
{
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;
};

class Son :public Base
{
public:
	int m_D;
};

void test01()
{
	//ans = 16
	// 父类中所以非静态成员属性都会被子类继承下去
	// 父类中私有成员属性 是被编译器给隐藏了,因此是访问不到,但是确实被继承下了。
	cout << "size of Son = " << sizeof(Son) << endl;
}  

int main(){
	
	test01();

	system("pause");
	return 0;
}

之后采用开发人员命令提示符查看对象模型
在黑框中首先进入项目所在位置,之后输入以下代码:

c1 /d1 reportSingleClassLayouy类名 文件名

image

继承中的构造和析构顺序

当有继承时,顺序是先有父类构造,再子类构造,之后析构的话先有子类析构之后再有父类析构。
其实也挺好理解的,现有父亲再有儿子,然后按照栈式的方式取管理局部变量,所以先析构子类再析构父类。

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

class Base 
{
public:
	Base()
	{
		cout << "这是Base的构造函数" << endl;
	}

	~Base()
	{
		cout << "这是Base的析构函数" << endl;
	}
};

class Son :public Base
{
public:
	Son()
	{
		cout << "这是Son的构造函数" << endl;
	}

	~Son()
	{
		cout << "这是Son的析构函数" << endl;
	}
};

void test01()
{
	Son son;
}  

int main(){
	
	test01();

	system("pause");
	return 0;
}

继承中同名成员的处理方式

image

标签:对象,子类,class,继承,Base,父类,public
From: https://www.cnblogs.com/gcfer/p/18546307

相关文章

  • 第三章:YashanDB 对象管理(进阶篇)
    YashanDB对象管理(进阶篇)表管理表是YashanDB中数据存储基本单元。每个表都是由列和行组成的。创建表时,需要指定表类型。表上可以有约束用于确保数据的有效性表的存储结构存储结构-Segment表——>表段索引——>索引段延迟段的创建USER_TABLESUSER_SEGMENTSR......
  • Python __dict__属性:查看对象内部所有属性名和属性值组成的字典
    在Python中,每个对象都有一个__dict__属性,这个属性是一个字典,用于存储对象的属性和对应的值。对于自定义的类实例和大多数内置对象类型,你都可以通过访问__dict__属性来查看对象内部的所有属性名和属性值。以下是一些示例,展示了如何使用__dict__属性:示例1:自定义类实例class......
  • C++ 编程基础(5)类与对象 | 5.8、面向对象五大原则
    文章目录一、面向对象五大原则1、单一功能(SingleResponsibilityPrinciple,SRP)2、开放封闭原则(Open/ClosedPrinciple,OCP)3、里氏替换原则(LiskovSubstitutionPrinciple,LSP)4、接口隔离原则(InterfaceSegregationPrinciple,ISP)5、依赖倒置原则(DependencyInversio......
  • C++ 编程基础(5)类与对象 | 5.7、友元
    文章目录一、友元1、友元函数1.1、声明友元函数1.2、友元函数的特性2、友元类2.1、声明友元类2.2、友元类的特性3、使用场景4、注意事项5、总结前言:在C++中,友元类和友元函数是一种特殊的访问控制机制,允许一个类授予另一个类或函数特殊的访问权限。通过使用友元......
  • 如果在整个项目中 QTcpSocket 被多次引用,并且多个对象或类需要共享同一个 QTcpSocket
    如果在整个项目中QTcpSocket被多次引用,并且多个对象或类需要共享同一个QTcpSocket实例,那么使用QSharedPointer<QTcpSocket>是一个不错的选择。以下是使用QSharedPointer<QTcpSocket>的优点、注意事项以及一些替代方案的建议。为什么推荐使用QSharedPointer<QTcpSo......
  • Day 14 匿名函数 内置函数 面向对象编程
    目录0上节课复习0.1迭代器0.1.1可迭代对象0.1.2迭代器对象0.1.3for循环原理0.2三元表达式0.3列表推导式0.4字典生成器0.5生成器0.5.1生成器表达式0.6递归0.7二分法1匿名函数1.1有名函数1.2匿名函数2内置函数2.1掌握2.2了解3面向过程编程0上节课复习0.1迭代......
  • 【多线程奇妙屋】你听说过设计模式吗?软件开发中可全局访问一个对象的设计模式——单例
    本篇会加入个人的所谓鱼式疯言❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......
  • 带你理解Python面向对象
    一、面向对象编程1.1面向过程与面向对象面向过程:更加注重通过函数来组织代码,适合任务明确、结构简单的程序。面向对象:则注重通过对象和类来组织代码,适合复杂且需要长期维护和扩展的大型项目。面向过程和面向对象都是一种编程方式,只不过再设计上有区别。三大基本特性:封装......
  • Python 面向对象编程
    一、面向对象编程1.1面向过程与面向对象在理解面向对象编程(OOP)之前,我们先要了解 面向过程(POP) 和 面向对象(OOP) 的区别。1.1.1面向过程(POP)-面向过程的编程思想将一个功能分解为一个一个小的步骤,我们通过完成一个一个的小的步骤来完成一个程序-这种编程方式,符合我们......
  • 【进阶系列】带你看懂python的面向对象编程#类 #对象 #继承 #封装 #多态
    进阶系列一、面向对象编程1.1面向过程与面向对象1.1.1面向过程pop:1.1.2面向对象oop:1.2类、对象1.2.1类的定义与实例化对象1.2.2访问属性/方法1.2.3对象与类的关系1.2.5⭐魔方——构造函数与析构函数1.2.6⭐类属性/方法与实例对象属性/方法与静态方法小练习1......