C++【视频笔记个人思考_Wang】

news2024/12/25 14:04:48

  • 时间进度
  • C++是什么?
  • 多态
    • 什么是多态?
      • 生活中的多态
      • C++中的多态
    • 赋值兼容
      • 赋值兼容规则
      • 实现
      • 安全转换

时间进度

Day101 ok
Day804 ok
Day805 ok

C++是什么?

C++大部分包含C语言。

C++完全兼容C语言。

C++在C语言的基础上添加:封装、继承、多态、模板(STL)。

C语言在大规模程序和需要高度抽象和建模时,不能满足。

面向过程:写函数。
面向对象:写类。

C语言也可以面向过程,C++也可以面向过程,面向对象和面向过程是思想。

各语言排行榜

应用领域:高效,同时需要好的抽象机制和建模能力的领域。

高效 + 面向对象:系统开发。

桌面系统,服务器开发,电信,金融,电商,通信,媒体,路由器,游戏、分布式、云计算等。

举例:QQ、WPS、英雄联盟、Nginx、Qt、MySQL、谷歌浏览器、PS、UE、JVM、FFMPEG(音视频行业的瑞士军刀)、360、VMWare、魔兽世界、MFC、ACE、Boost、Cocos(基于循环)、CrossApp(基于事件)、Unreal、GMQ(分布式)、JsonCpp(前后台数据传输)、libevent(网络框架)、TinyHTTPd(HTTP实现源码)、Nginx(HTTP服务、负载均衡、反向代理、邮件服务)、RTMPDump(拉流)、SDL(做界面)、XML(前后台数据传输)。

多态

什么是多态?

生活中的多态

几个相似而不完全相同的对象,发出同一消息,做出不同反应,执行不同的操作。

C++中的多态

由继承而产生的相关的不同的类,其对象对同一消息会作出不同的响应。

多态能增加程序的灵活性,可以减轻系统升级,维护,调试的工作量和复杂度。

设计模式就是将多态的性能发挥到极致。

赋值兼容

赋值兼容是多态的前提条件。

赋值兼容规则

在需要基类对象的任何地方,都可以使用公有派生类对象来替代。
只有在公有派生类中才有赋值兼容,赋值兼容是一种默认行为,不需要任何显示的转化步骤。

赋值兼容细化:

  • 派生类的对象可以赋值给基类对象。
  • 派生类的对象可以初始化基类的引用。
  • 派生类对象的地址可以赋给指向基类的指针。

实现

代码演示:

#include <iostream>

using namespace std;

class Shape
{
public:
Shape(int x, int y): _x(x), _y(y) {}

	void draw()
	{
		cout << "draw Shap ";
		cout << "start (" << _x << "," << _y << ") " << endl;
	}

protected:
	int _x;
	int _y;
};

class Circle : public Shape
{
public:
	Circle(int x, int y, int r)
		:Shape(x, y), _r(r) {}
	void draw()
	{
		cout << "draw Circle ";
		cout << "start (" << _x << "," << _y << ") ";
		cout << "raduis r = " << _r << endl;
	}
private:
	int _r;
};

int main()
{
	Shape s(3, 5);

	s.draw();
	Circle c(1, 2, 4);
	c.draw();

	//子类对象赋给父类对象
	s = c;
	s.draw();

	//子类对象赋给父类引用
	Shape& rs = c;
	rs.draw();


	//子类对象地址赋给父类指针。避免赋值,父类和子类地址相同,类型不同,可访问范围不同。
	Shape* ps = &c;
	ps->draw();
	return 0;
}

运行结果:
运行结果

安全转换

子类是父类的超集,所以赋值兼容是安全的。

子类对象初始化的时候,调用父类的构造器,也是发生了赋值兼容的问题。除此之外,其它任何父类成员调用,均是如此。

大范围的指针向小范围的指针转化是安全的。反之,不亦然。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1012494.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码混淆和加固,保障应用程序的安全性

摘要&#xff1a;本文将详细介绍iOS技术博主在保护应用程序代码安全方面的两种重要方式&#xff1a;代码混淆和代码加固。通过代码混淆和加固&#xff0c;博主可以有效防止他人对应用程序进行逆向工程和篡改&#xff0c;提高应用程序的安全性。 引言&#xff1a;作为iOS技术博…

嵌入式Linux驱动开发(I2C专题)(六)

完善虚拟的I2C_Adapter驱动并模拟EEPROM 参考资料&#xff1a; Linux内核文档: Linux-4.9.88\Documentation\devicetree\bindings\i2c\i2c-gpio.txtLinux-5.4\Documentation\devicetree\bindings\i2c\i2c-gpio.yaml Linux内核驱动程序&#xff1a;使用GPIO模拟I2C Linux-4.9.…

【洁洁送书第七期】现在学 Java 找工作还有优势吗

java 现在学 Java 找工作还有优势吗&#xff1f;活力四射的 JavaTIOBE 编程语言排行榜从零开始学会 JavaJava 语言运行过程基础知识进阶知识高级知识talk is cheap, show me the code结语 文末赠书 现在学 Java 找工作还有优势吗&#xff1f; 在某乎上可以看到大家对此问题的…

C++算法进阶系列之倍增算法 ST 表

1. 引言 前文使用倍增算法实现了快速求幂的运算&#xff0c;本文继续讲解ST表&#xff0c;ST表即倍增表&#xff0c;本质就是动态规划表&#xff0c;记忆化了不同子问题域中的结果&#xff0c;用于实时查询。只是动态规划过程和传统的稍有点不一样&#xff0c;采用了倍增思想。…

一文带你走进软件测试的大门

目录 前言 需求 用户需求 软件需求 从测试人员的角度看需求 测试用例 测试环境 测试数据 预期结果 操作步骤 为什么要有测试用例 Bug的概念 世界上的第一个bug bug的定义 开发模型和测试模型 软件的生命周期 开发模型 瀑布模型 螺旋模型 增量、迭代 敏捷 …

服务器搭建(TCP套接字)-基础版(客户端)

一、socket 1.1、vim man查看socket :!man socket1.2、 依赖的头文件 #include <sys/types.h> #include <sys/socket.h>1.3、原型 int socket(int domain, int type, int protocol);domain说明AF_INETIPV4协议AF_INET6IPV6协议AF_LOCALUnix域协议 type说明S…

华为云云耀云服务器L实例评测|单节点环境下部署ClickHouse21.1.9.41数据库

文章目录 前言云耀云服务器L实例简介clickhouse数据库简介 一、配置环境购买云耀云服务器L实例查看云耀云服务器L实例状态重置密码查看弹性公网IP地址 FinalShell连接服务器二、搭建ClickHouse单机服务下载ClickHouse安装包解压安装依次解压启动clickhouse相关目录 三、允许远程…

为什么IPIDE代理IP可以帮助TikTok引流?

近期&#xff0c;TikTok菲律宾站点保温杯30天销量破30万&#xff0c;GMV达到近千万人民币。在当今社交媒体迅速崛起的时代&#xff0c;营销策略也在逐渐改变。TikTok作为一款非常热门的短视频社交应用&#xff0c;拥有庞大的用户群体&#xff0c;为跨境企业在国际市场上推广产品…

5个免费样机素材网站,设计必备,赶紧马住!

5个设计师必备的样机素材网站&#xff0c;免费下载~ 1、菜鸟图库 https://www.sucai999.com/searchlist/3217.html?vNTYxMjky 菜鸟图库有多种类型的设计素材&#xff0c;像平面、电商、UI、办公等素材这里面都能找到&#xff0c;样机素材非常丰富&#xff0c;比如服装的、电子…

Arcgis在属性表中添加外部Excel信息

Arcgis在属性表中添加外部Excel信息 现需要把EXCEL中这个每个像元的叶面积指数值&#xff0c;导入每个像元的属性表中。 在点的图层上右击&#xff0c;找到连接和关联&#xff0c;点击连接 字段是用于连接属性表和EXCEL的键&#xff0c;两个字段下的数据都是主键&#xff0…

揭秘梦幻般的Glam风格是什么?

如果你热爱一切漂亮、奢华和总体而言都非常华丽&#xff0c;那么华丽风格可能非常适合你。这种风格从传统的外观出发&#xff0c;通过大量的装饰细节增添了一些华丽的元素&#xff0c;创造出一个令人惊叹、闪闪发光、全方位优雅的外观。如果华丽风格引起了你的兴趣&#xff0c;…

微信小程序自动化发布

参考:https://developers.weixin.qq.com/miniprogram/dev/devtools/ci.html 参考:https://www.npmjs.com/package/miniprogram-ci npm install miniprogram-ci -S上传文件 xx.js const isNodeJs typeof process ! undefined && process.release ! null &&…

RabbitMQ消息可靠性(二)-- 消费者消息确认

和生产者的消息确认机制不同&#xff0c;因为消息接收本来就是在监听消息&#xff0c;符合条件的消息就会消费下来。 所以&#xff0c;消息接收的确认机制主要存在三种模式&#xff1a; ①自动确认&#xff0c; 这也是默认的消息确认情况。 AcknowledgeMode.NONE RabbitMQ成功…

Google高性能开源框架gRPC:快速搭建及HTTP/2抓包

一、什么是gRPC gRPC是google发起的一个*远程过程调用&#xff08;rpc&#xff09;*开源框架&#xff0c;可以在任何语言中&#xff0c;用任何编程语言编写。gRPC基于HTTP/2协议&#xff0c;使用Protocol Buffers作为序列化工具。 gRPC官网&#xff1a;https://grpc.io/ RPC …

目标跟踪:Mobile Vision Transformer-based Visual Object Tracking

论文作者&#xff1a;Goutam Yelluru Gopal,Maria A. Amer 作者单位&#xff1a;Concordia University 论文链接&#xff1a;https://arxiv.org/pdf/2309.05829v1.pdf 项目链接&#xff1a;https://github.com/goutamyg/MVT 内容简介&#xff1a; 1&#xff09;方向&#…

使用凌鲨调试网络接口

接口或API是程序员之间进行沟通和协作的重要工具之一。通过接口或API&#xff0c;程序员可以相互调用和共享代码、数据和资源&#xff0c;从而提高协作和开发的效率与便捷性。接口调试的难易程度直接决定了协作的效率。 凌鲨支持主流的接口协议&#xff0c;包括GRPC、OPENAPI/…

Windows PostgreSql 创建多个数据库目录

1 使用默认用户Administrator 1.1初始化数据库目录 E:\Program Files\PostgreSQL\13> .\bin\initdb -D G:\DATA\pgsql\data3 -W -A md5 1.2连接数据库 这时User为Administrator&#xff0c;密码就是你刚才设置的&#xff0c;我设置的为123456&#xff0c;方便测试。 2 添加…

算法leetcode|81. 搜索旋转排序数组 II(rust重拳出击)

文章目录 81. 搜索旋转排序数组 II&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a;进阶&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 81. 搜索旋转排序数组 II&#xff1…

读取txt文件中的字符串内容并转换成tensor

import os import torch import numpy as np import json# 初始化数据集 dataset ""# 遍历文件夹下的所有文件 folder_path H:/学习资料/代码/python/jupyterlab_project/pytorch/log/ for file_name in os.listdir(folder_path):file_path os.path.join(folder_p…

【计算机网络】网络入门基础

文章目录 1. 网络发展历史2. 认识协议OSI七层协议 3. TCP/IP协议网络与操作系统 4. 数据传输流程4.1 数据包的封装和分用4.2 同一局域网两台主机的通信4.3 跨一个路由器的两个局域网的通信 5. 网络中的地址管理IP地址MAC地址 1. 网络发展历史 &#x1f4a8;计算机网络的发展历…