当前位置: 首页 > news >正文

c++笔记理解

1.封装

(1)构造函数不是必须在的

可以通过行为修改属性

(2)private和protected区别在于继承那里要学

(3)类默认是私有,struct是共有

私有的好处:控制数据的有效性,意思是在外面给函数的方式写,可以设置多少多少就不能写那种

(4)cube例子不会的点

类内写:
bool equal2(cube& c2)
{if (h == c2.h && w == c2.w && l == c2.l)return true;return false;
}
类外写:cout << cu.equal2(cu2);

(5)点和圆的关系

#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
class point
{int x, y;//点所在的位置
public:point(int x, int y){this->x = x; this->y = y;}int getx(){return x;}int gety(){return y;}
};
class circle
{//int o,r;//分别是圆心所在的位置和半径,不行,得要二维数组int x, y, r;
public:circle(int x, int y, int r){this->r = r; this->x = x; this->y = y;}/*int geto()//一个坐标一个坐标访问{//return o;不需要呀,因为你有构造函数了,可是无法访问呀?}*/int getx(){return x;}int gety(){return y;}int getr(){return r;}//把判断变成成员函数,传进来x,yvoid relation(point& p){//先求出两点之间的距离,开根号sqrt()int d = sqrt((p.getx() - x) * (p.getx() - x) + (p.gety() - y) * (p.gety() - y));if (d < r)cout << "点在圆内" << endl;else if (d == r)cout << "点在圆上" << endl;else cout << "点在圆外" << endl;}
};int main()
{circle c(2, 5, 3);point p(4, 4);//求点和圆的位置关系//点在圆内点在圆上点在员外//只需要将半径和这俩点之间的关系比较即可c.relation(p);
}

全局函数yyds

#include<iostream>
#include<stdio.h>
#include<math.h>
//class point;
using namespace std;
class circle
{//int o,r;//分别是圆心所在的位置和半径,不行,得要二维数组int x, y, r;
public://class point;circle(int x,int y, int r){this->r = r; this->x = x; this->y = y;}/*int geto()//一个坐标一个坐标访问{//return o;不需要呀,因为你有构造函数了,可是无法访问呀?}*/int getx(){return x;}int gety(){return y;}int getr(){return r;}//把判断变成成员函数,传进来x,y/*void relation(point& p){//先求出两点之间的距离,开根号sqrt()int d = sqrt((p.getx() - x) * (p.getx() - x) + (p.gety() - y) * (p.gety() - y));if (d < r)cout << "点在圆内" << endl;else if (d == r)cout << "点在圆上" << endl;else cout << "点在圆外"<<endl;}*/
};
class point
{int x,y;//点所在的位置
public:point(int x,int y){this->x = x; this->y = y;}int getx(){return x;}int gety(){return y;}
};
//全局函数还是好
void relation(circle c, point p)
{int d = sqrt((p.getx() - c.getx()) * (p.getx() - c.getx()) + (p.gety() - c.gety()) * (p.gety() - c.gety()));if (d < c.getr())cout << "点在圆内" << endl;else if (d == c.getr())cout << "点在圆上" << endl;else cout << "点在圆外" << endl;
}
int main()
{circle c(2, 5, 3);point p(4, 4);//求点和圆的位置关系//点在圆内点在圆上点在员外//只需要将半径和这俩点之间的关系比较即可relation(c,p);
}

咋说呢,你要想用哪个类,你就把这个类写到前面

可以把一个类型为某类的变量定义为另一个类的变量

圆心就是一个点,因此可以将园中的圆心定义为点的类型

(6)我就要把这个类放在不同文件里的知识单独拎出来

把类的声明放在头文件中使用.h文件;类中文件的实现放在cpp中重新起一个cpp文件,这个文件要用声明的头文件;在main函数里面想要使用类,就在前面加上声明的头文件

分别如何书写呢?

例如circle文件:

在头文件里写一个.h文件,然后把类复制进去,去掉函数实现,留下成员变量和成员函数的声明;

然后再源文件里另写一个cpp文件,这个文件写下来类内各个函数的具体实现就好了

这下:函数的声明函数的实现就都分得很清了

2.函数的初始化和销毁

1.构造函数和析构函数都是只要创建了对象,这个函数就会被自动调用,就算你不写,系统会自动给你写一个空的构造函数然后一调用,但是你要是写了就用你的,即便你不调用这个函数,他也会自动调用你写的

2.你要是在函数体内(不是main),那么就会放在栈上,这个函数用完就要析构销毁

main中,只有当main执行完了以后才能执行析构函数

3.匿名构造?三种方法

拷贝构造函数part:
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
class person
{
public:int age;person(int age){this->age = age;}//拷贝构造函数 //因为你不能修改你传入的p的属性,因此要用静态引用person(const person& p){//将传入的人身上的所有属性拷贝到我身上,我现在的age=传入的p的ageage = p.age;cout << "输出拷贝构造函数" << endl;}};
int main()
{person p1(10);cout << p1.age << endl;person p2(p1);cout << p2.age << endl;//输出也是10}

匿名构造函数

	person(10);//没有给这个构造函数一个对象名,就是匿名构造函数//特点:当前行执行结束,就会被释放,就会析构函数Person(p3)//这是不对的//注意:不要利用拷贝函数初始化匿名对象-编译器会认为Person(p3) == Person p3 编译器会认为是对象的声明

隐式转换法的意思是你写一个person p3=10;系统会自动给你转换成显式法

4.

//值传递的方式给函数参数传值
//※拷贝构造函数为什么可以值传递哪里体现了?都没见拷贝构造函数;
解密时刻:!!!!!!!!!!!!!!!!!!!!!
因为当你值传递的时候就会调用拷贝构造函数,值传递相当于给了一个副本嘛
void dowork(Person p)
{}
void test02()
{Person p;dowork(p);
}
//值方式返回局部对象
//输出那个是引用的解引用吗?,局部对象是p1?拷贝构造函数在哪?好吧,test03第一句就是p=p1;
//现在p有p2的所有属性,因此出来的对象是谁呢?p1本身?也就是想用p来输出p1,那为啥不直接输出dowork2()呢?
解密:p和p1的不是一个了,地址都不一样,相当于值传递,返回一个p1,就拷贝了一个p1
Person dowork2()
{Person p1;cout << (int*)&p1 << endl;return p1;
}
void test03()
{Person p = dowork2();cout << (int*)&p << endl;
}

5.深拷贝和浅拷贝

//再复习一下new的代码
int* p=new int(*p.height)//意思就是为p开辟一个空间,里面的内容是int括号里的内容,左边要是一个指针,指向这段空间

如果你的成员变量在堆区,那么就容易出现重复释放空间的问题,因为浅拷贝就相当于别人的值赋给你,同时你的位置也会和他一样,那你俩运行完就都会释放它就释放了两次,所以原因就在于你俩堆的位置在一块呢,所以把他俩放两个位置不就好了,用new开辟一个新空间

Person(const Person& p)
{cout << "Person的拷贝构造函数调用" << endl;m_Age = p.m_Age;//m_Height = p.m_Height;编译器默认实现的就是这行代码//深拷贝操作m_Height = new int(*p.m_Height);
}

6.当其他类对象作为本类的类成员时,先构造其他类,然后再构造本类,

析构的顺序与构造相反

3.友元

1.用途:private成员外面不能被访问,但有时候你想让外面某些特殊函数去访问,就采用友元

2.三种:全局函数;成员函数;类;

(1)全局函数:就是给类中前面加上函数的声明,并且给函数声明的前面加上friend

class friend
{friend void get();
}

(2)类:A想用B的,你就给A前面加上B的声明

class A//A里用B了,所以要声明friend
{friend class B;private:B b1;
}
class B
{}
你放在B里面,就是要给B说别人能访问你

(3)成员函数

整明白了
就是你A类里一个函数想访问另一个类B,你就要在B里声明这个函数
不是想全局函数那样直接前面加一个friend,而是要在函数名字前面加上所属的类
例如下面
friend void GoodGay::visit();

相关文章:

c++笔记理解

1.封装 &#xff08;1&#xff09;构造函数不是必须在的 可以通过行为修改属性 &#xff08;2&#xff09;private和protected区别在于继承那里要学 &#xff08;3&#xff09;类默认是私有&#xff0c;struct是共有 私有的好处&#xff1a;控制数据的有效性&#xff0c;意…...

二进制部署k8s集群之cni网络插件

目录 k8s的三种网络模式 pod内容器之间的通信 同一个node节点中pod之间通信 不同的node节点的pod之间通信 flannel网络插件 flannel的三种工作方式 VxLAN host-GW UDP Flannel udp 模式 Flannel VXLAN 模式 flannel插件的三大模式的总结 calico网络插件 k8s 组网…...

二维矩阵子集的最大值

登录—专业IT笔试面试备考平台_牛客网 正好遇到了 对于一维,我们只需要贪一次 int ans -1E9; int suf -1E9; for (int i 0; i < n; i) {if (i && (a[i] - a[i - 1]) % 2 0) {suf 0;}suf std::max(suf, 0) a[i];ans std::max(ans, suf); } ans就是最大值…...

瑞_23种设计模式_装饰者模式

文章目录 1 装饰者模式&#xff08;Decorator Pattern&#xff09;1.1 介绍1.2 概述1.3 装饰者模式的结构 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 JDK源码解析5 总结5.1 装饰者模式的优缺点5.2 装饰者模式的使用场景5.3 装饰者模式 VS 代理模式 &#x…...

使用Python制作进度条有多少种方法?看这一篇文章就够了!

前言 偶然间刷到一个视频&#xff0c;说到&#xff1a;当程序正在运算时&#xff0c;会有一个较长时间的空白期&#xff0c;谁也不知道程序运行的进度如何&#xff0c;不如给他加个进度条。 于是我今个就搜寻一下&#xff0c;Python版的进度条都可以怎么写&#xff01; 送书…...

SpringBoot-2.7.6基于SLF4J日志门面的日志框架切换

SpringBoot 没有强制性的日志记录依赖项,但 Commons Logging API 除外,它通常由 Spring Framework 的模块提供。 要使用 Logback,您需要将其包含在类路径中。 推荐的方法是您只需要通过启动器,这都取决于 . 对于 Web 应用程序 ,因为它可传递地依赖于日志记录启动器。 如果…...

MongoDB聚合运算符:$binarySize

$binarySize聚合运算符返回给定字符串或二进制数据的字节数。 语法 { $binarySize: <string or binData> }使用 <string or bindData>可以是任何能够被解析为字符串和二进制数据的表达式&#xff1b;如果表达式解析为null&#xff0c;则$binarySize也返回null&a…...

Android的ViewModel

前言 在Compose的学习中&#xff0c;我们在可组合函数中使用rememberSaveable​​​​​​​保存应用数据&#xff0c;但这可能意味着将逻辑保留在可组合函数中或附近。随着应用体量不断变大&#xff0c;您应将数据和逻辑从可组合函数中移出。 而在之前的应用架构学习中&…...

Android 圆环带刻度条进度动画效果实现

效果图 需求是根据传感器做一个重力球效果&#xff0c;先实现了动画后续加上跟传感器联动. 又是摆烂的一天&#xff0c; 尚能呼吸&#xff0c;未来可期啊 View源码 package com.android.circlescalebar.view;import android.content.Context; import android.content.res.Typ…...

94. 二叉树的中序遍历

// 定义一个名为Solution的类&#xff0c;用于解决二叉树的中序遍历问题 class Solution { // 定义一个公共方法&#xff0c;输入是一个二叉树的根节点&#xff0c;返回一个包含中序遍历结果的整数列表 public List<Integer> inorderTraversal(TreeNode root) { // …...

汽车信息安全概述

随着智能网联汽车的迅猛发展&#xff0c;车辆不再是简单的交通工具&#xff0c;而是集数据收集、处理与通信于一体的移动智能终端。然而&#xff0c;这一变革也使得汽车成为黑客攻击的新目标。汽车信息安全问题日益凸显&#xff0c;成为行业关注的焦点。本文将深入探讨汽车信息…...

Linux——基础IO

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、C语言IO1、写文件2、读文件3、stdin & stdout & stderr 二、系统文件I/O1、写文件…...

数据结构-数组

一,数组基础及注意事项 1,用来储存一组相同的类型的数据. 2,在内存中,分配连续的空姐,数组创建时要指定容量(大小). 3,创建格式: 数据类型 []数组名 int[] arr new int[10] int[] arr2 {1,2,3,4}. 4,索引--访问数组时通过索引进行操作. (注意:一定要理解索引的含义,在数据结…...

【Java程序设计】【C00279】基于Springboot的智慧外贸平台(有论文)

基于Springboot的智慧外贸平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的智慧外贸平台 本系统分为系统功能模块、管理员功能模块、买家功能模块以及商家功能模块。 系统功能模块&#xff1a;在平台首页可以…...

C#,计算几何,计算机图形学(Computer Graphics)洪水填充算法(Flood Fill Algorithm)与源代码

1 泛洪填充算法(Flood Fill Algorithm) 泛洪填充算法(Flood Fill Algorithm) &#xff0c;又称洪水填充算法&#xff0c;是在很多图形绘制软件中常用的填充算法&#xff0c;最熟悉不过就是 windows 自带画图软件的油漆桶功能。 2 源程序 using System; using System.Collecti…...

C# 实现网页内容保存为图片并生成压缩包

目录 应用场景 实现代码 扩展功能(生成压缩包) 小结 应用场景 我们在一个求职简历打印的项目功能里&#xff0c;需要根据一定的查询条件&#xff0c;得到结果并批量导出指定格式的文件。导出的格式可能有多种&#xff0c;比如WORD格式、EXCEL格式、PDF格式等&#xff0c;…...

C#_事件简述

事件模型简述 C#中事件的运行模式为"发布订阅模型"&#xff0c;事件触发者称为"发布者"&#xff0c;事件处理者称为"订阅者" 事件模型的五个组成部分 事件&#xff08;成员&#xff09;事件的拥有者&#xff08;类/对象&#xff09;事件的响应…...

C语言:指针(一)

目录 1.内存和地址2. 指针变量和地址2.1 取地址操作符&#xff08;&&#xff09;2.2 指针变量和解引用操作符&#xff08;*&#xff09;2.2.1 指针变量2.2.2 解引用操作符&#xff08;*&#xff09; 2.3 指针变量的大小 3.指针变量的类型和意义3.1 指针的解引用3.2 指针 -指…...

【leetcode刷题之路】面试经典150题(3)——哈希表+区间

文章目录 5 哈希表5.1 【哈希表】赎金信5.2 【数学】同构字符串5.3 【数学】单词规律5.4 【哈希表】有效的字母异位词5.5 【哈希表】字母异位词分组5.6 【双指针】两数之和5.7 【数学】快乐数5.8 【哈希表】219. 存在重复元素 II5.9 【数学】最长连续序列 6 区间6.1 【数学】汇…...

群晖NAS DSM7.2.1安装宝塔之后无法登陆账号密码问题解决

宝塔的安装就不在这赘述了&#xff0c;只说下&#xff0c;启动之后默认账号密码无法登陆的问题。 按照上面给出的账号密码&#xff0c;无法登陆 然后点忘记密码&#xff0c;由于是docker安装的&#xff0c;根目录下没有/www/server/panel 。 也没有bt命令 要怎么修改呢。 既然…...

MecanumBase:轻量级全向轮运动学逆解C库

1. MecanumBase 库概述MecanumBase 是一个专为全向移动机器人设计的轻量级底层控制库&#xff0c;核心目标是将复杂的轮式运动学解耦为工程师可直观理解的输入指令&#xff1a;平移方向角&#xff08;θ&#xff09;与旋转角速度&#xff08;ω&#xff09;。该库不依赖任何特定…...

高效音乐资源获取:Soundcloud Music Downloader全功能解析

高效音乐资源获取&#xff1a;Soundcloud Music Downloader全功能解析 【免费下载链接】scdl Soundcloud Music Downloader 项目地址: https://gitcode.com/gh_mirrors/sc/scdl 基于Python的跨平台音乐资源管理方案 一、音乐下载的痛点与解决方案 在数字音乐时代&…...

MxRadioRF2xx库:ARM Mbed平台RF2xx射频驱动开发指南

1. MxRadioRF2xx 库概述 MxRadioRF2xx 是一个专为 ARM Mbed OS 平台设计的 Atmel&#xff08;现 Microchip&#xff09;RF2xx 系列射频收发器驱动库。该库并非对底层寄存器操作的简单封装&#xff0c;而是面向嵌入式无线应用开发者的工程化抽象层&#xff0c;其核心目标是&…...

QuickRecorder高效解决方案:从基础到进阶的macOS录屏全指南

QuickRecorder高效解决方案&#xff1a;从基础到进阶的macOS录屏全指南 【免费下载链接】QuickRecorder A lightweight screen recorder based on ScreenCapture Kit for macOS / 基于 ScreenCapture Kit 的轻量化多功能 macOS 录屏工具 项目地址: https://gitcode.com/GitHu…...

从‘水变油’到‘大师一问三不知’:求实学风如何塑造科学巨匠与避免历史弯路

1. 科学史上的两副面孔&#xff1a;浮夸与求实 1993年&#xff0c;一场名为"水变油"的闹剧在国内掀起轩然大波。某"发明家"声称发明了能将水转化为燃料的"神奇添加剂"&#xff0c;甚至获得了部分政府部门的支持。这个明显违背能量守恒定律的&quo…...

如何用ABC系统三分钟搞定复杂电路优化:顺序逻辑综合与形式验证的完整指南

如何用ABC系统三分钟搞定复杂电路优化&#xff1a;顺序逻辑综合与形式验证的完整指南 【免费下载链接】abc ABC: System for Sequential Logic Synthesis and Formal Verification 项目地址: https://gitcode.com/gh_mirrors/ab/abc 在现代数字电路设计中&#xff0c;你…...

根据您提供的写作范围,我为您总结的标题为:“昆通泰MCGS7.7嵌入版:6车位停车场监控系统仿...

6车位停车场监控系统昆通泰MCGS7.7嵌入版仿真运行带运行效果视频6车位停车场监控系统用昆通泰MCGS7.7嵌入版做仿真&#xff0c;真的是新手友好型项目——不用扛硬件、不用接复杂通讯&#xff0c;靠内部变量和几段脚本就能把核心逻辑跑通&#xff0c;还能直观看到实时效果&#…...

ABC系统实战指南:逻辑综合与形式验证的数字电路设计工具

ABC系统实战指南&#xff1a;逻辑综合与形式验证的数字电路设计工具 【免费下载链接】abc ABC: System for Sequential Logic Synthesis and Formal Verification 项目地址: https://gitcode.com/gh_mirrors/ab/abc 在现代数字电路设计流程中&#xff0c;逻辑综合与形式…...

保姆级教程:用Docker快速搭建一个可复现的Hive测试环境(专治各种启动报错)

从零构建可复现的Hive沙箱&#xff1a;Docker Compose全流程避坑指南 每次调试Hive时遇到FAILED: HiveException或metastore连接问题&#xff0c;是否感觉像在破解一个没有说明书的密码锁&#xff1f;传统环境配置的不可复现性让问题排查变成一场噩梦。本文将带你用Docker技术…...

Deepfake Offensive Toolkit Docker部署:跨平台解决方案详解

Deepfake Offensive Toolkit Docker部署&#xff1a;跨平台解决方案详解 【免费下载链接】dot The Deepfake Offensive Toolkit 项目地址: https://gitcode.com/gh_mirrors/dot/dot Deepfake Offensive Toolkit&#xff08;简称dot&#xff09;是一款功能强大的深度学习…...