c++自学笔记(陆续更新)

news2024/11/24 23:01:54

本笔记为从菜鸟教程边学边记录的笔记---》C++ 教程 | 菜鸟教程

面向对象程序设计

  • 封装(Encapsulation):封装是将数据和方法组合在一起,对外部隐藏实现细节,只公开对外提供的接口。这样可以提高安全性、可靠性和灵活性。

  • 继承(Inheritance):继承是从已有类中派生出新类,新类具有已有类的属性和方法,并且可以扩展或修改这些属性和方法。这样可以提高代码的复用性和可扩展性。

  • 多态(Polymorphism):多态是指同一种操作作用于不同的对象,可以有不同的解释和实现。它可以通过接口或继承实现,可以提高代码的灵活性和可读性。

  • 抽象(Abstraction):抽象是从具体的实例中提取共同的特征,形成抽象类或接口,以便于代码的复用和扩展。抽象类和接口可以让程序员专注于高层次的设计和业务逻辑,而不必关注底层的实现细节。

hello word

#include <stdio.h>
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
   SetConsoleOutputCP(65001);
   cout << "hello world!"<<endl; //也可以用\n代替endl;都是换行的意思
   return 0;
}

变量别名!

#include <iostream>
using namespace std;
int main()
{
    typedef int it;//int的别名 是it
    it a;//以后就可以用it来定义变量
}

枚举类型

默认情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,以此类推。但是,您也可以给名称赋予一个特殊的值,只需要添加一个初始值即可。例如,在下面的枚举中,green 的值为 5。

#include <iostream>
using namespace std;
int main()
{
   enum {green,blue=5,red} c;
   c=red;
   cout <<"sdsdds" <<c;
}

类型转换-静态转换

#include <iostream>
#include <typeinfo>
#include <windows.h>
using namespace std;
int main()
{
   SetConsoleOutputCP(65001);
   //这个是c++的断点 这配置c语言也支持断点
   int a = 10;
   //静态转换 数据 类型;
   float b=static_cast<float>(a);
   cout <<b<<"是"<<typeid(b).name()<<"类型";

}

 你像打印 i  就是int  打印 f   就是float;就是类型首字母

类型转换-常量转换

#include <iostream>
#include <typeinfo>
#include <windows.h>
using namespace std;
int main()
{
   SetConsoleOutputCP(65001);
   //这个是c++的断点 这配置c语言也支持断点
   const int a = 10;
   //常量转换
   int &b=const_cast<int&>(a);
   b=11;
   cout << b;
}

extern关键词用法

顺带你还知道下 .cpp怎么引入另一个.cpp的文件。

参考博主写的另一篇博文===》c++的extern用法理解_雪狼之夜的博客-CSDN博客

局部变量

局部作用域:在函数内部声明的变量具有局部作用域,它们只能在函数内部访问。局部变量在函数每次被调用时被创建,在函数执行完后被销毁。

#include <iostream>
using namespace std;
int main()
{
  int a=2;
  cout<<"局部变量a="<<a<<endl;
}

全局变量

全局作用域:在所有函数和代码块之外声明的变量具有全局作用域,它们可以被程序中的任何函数访问。全局变量在程序开始时被创建,在程序结束时被销毁。

#include <iostream>
using namespace std;
int a=2;
int main()
{
  cout<<"全局变量a="<<a<<endl;
}

块变量

块作用域:在代码块内部声明的变量具有块作用域,它们只能在代码块内部访问。块作用域变量在代码块每次被执行时被创建,在代码块执行完后被销毁。

#include <iostream>
using namespace std;

int main()
{
   int a=1;
   {
      int a=2;
      cout<<"块变量a="<<a<<endl;
   }
  cout<<"函数变量a="<<a<<endl;
}

<string> 

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

int main()
{
   string a="hello world";//或者写成string a("hello world") 等效
   a+=" 你好啊";
   cout<< a<<endl;
}

 类

#include <iostream>
using namespace std;
class Box{
   public:
      int a;
      int b;
      int chen(void){ //申明和定义在类里面
         return a*b;
      };
      void setVal(int,int);//先在类里面申明
      
};
void Box::setVal(int x,int y){//在类外面定义   范围解析运算符 :: 
   a=x;
   b=y;
};
int main(){
   Box box1;
   box1.setVal(3,2);
   cout << box1.chen();
}

类私有成员

#include <iostream>
using namespace std;
class Box{
   private://类私有,只有成员可以调用 也就是说你不可以通过box1.a来调用 ,这些变量其实你默认不用写private 这个变量,只要放在最上面他默认就是 私有
      int a,b;
   public://
      int c=10;
      int chen(void){ //申明和定义在类里面
         return a*b;
      };
      void setVal(int,int);//先在类里面申明
};
void Box::setVal(int x,int y){//在类外面定义
   a=x;
   b=y;
};
int main(){
   Box box1;
   cout<< box1.c<<endl;
   box1.setVal(3,2);
   cout << box1.chen();
}

看博主另一篇博文=》c++类 笔记_雪狼之夜的博客-CSDN博客

.cpp调用 .cpp和h的demo

看博主另一篇博文=》.cpp调用 .cpp和h的demo_雪狼之夜的博客-CSDN博客

数组

 C++ 不允许返回一个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针。

你不能简单地返回指向局部数组的指针,因为当函数结束时,局部数组将被销毁,指向它的指针将变得无效。

C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。

#include "head.h"
int* arrFun(){
   static int arr[3]={5,4,10};
   return arr;
} 

int main()
{
  int *arr=arrFun();
  cout<<arr[1];
}

函数动态分配数组

使用动态分配数组需要在函数内部使用 new 运算符来分配一个数组,并在函数结束时使用 delete 运算符释放该数组

#include "head.h"
int* arrFun(int size){
   int* arr=new int[size]; //这里也可以直接写3
   arr[0]=1;
   arr[1]=10;
   arr[2]=3;
   return arr;
} 

int main()
{
  int *arr=arrFun(3);
  cout<<arr[1];
  delete[] arr;
}

数组指针

#include <iostream>
using namespace std;
const int Max=3;
int main(){
   int arr[Max]={100,200,300};
   int *p;
   p=arr;
   for(int i=0;i<Max;i++){
      cout << "arr["<<i<<"]="<<*p<<endl;
      p++;
   }
}

今天也算理解了,p=arrr其实等价于p=&arr[0]  ,也就是说数组指针也可以变成下面这种写法。

我写一个从a[2]往a[0]输出的操作,你们理解下

#include <iostream>
using namespace std;
const int Max=3;
int main(){
   int arr[Max]={100,200,300};
   int *p;
   p=&arr[2];//等价于p=&arr[0]  也就是说
   for(int i=0;i<Max;i++){
      cout << "arr["<<i<<"]="<<*p<<endl;
      p--;
   }
}

数组指针另一种写法

#include <iostream>
using namespace std;
const int Max=3;
int main(){
   int arr[Max]={100,200,300};
   *(arr+2)=500;
   cout <<arr[2]<<endl;
   arr[2]=100;
   cout <<arr[2];
}

 *(arr+2)其实就等于 arr[2];  也就说说  等价于下面

#include <iostream>
using namespace std;
const int Max=3;
int main(){
   int arr[Max]={100,200,300};
   int *p;
   p=arr;
   cout<< *(p+2);
}

 

 C++ 指向指针的指针

#include "head.h"
int main(){
   int a=3000;//(值,物理地址) (3000,0x62ff08)
   int *p;
   p=&a;//p(0x62ff08,3000)
   int **pp;
   pp=&p;
   cout<<"a:"<<"("<<a<<","<<&a<<")"<<endl;
   cout<<"p:"<<"("<<p<<","<<*p<<")"<<endl;
   cout<<"pp:"<<"("<<pp<<","<<**pp<<")";
}

引用

#include "head.h"

int main()
{
   int a,b;
   int& x=a;//引用
   a=3;
   int *y;//指针
   y=&b;
   b=10;
   cout<<x<<endl;
   cout<<*y<<endl;
   y=&a;
    cout<<*y<<endl;
}

指针交换值

#include <iostream>
using namespace std;
int main()
{
   extern void ptrFun(int*,int*);
   int a=1,b=5;
   ptrFun(&a,&b);
   cout<<"a:"<<a<<endl;
   cout<<"b:"<<b;
}
void ptrFun(int *x,int *y){
   int a;
   a=*x;
   *x=*y;
   *y=a;
}

 引用交换值

#include <iostream>
using namespace std;
int main()
{
   extern void ptrFun(int&,int&);
   int a=1,b=5;
   ptrFun(a,b);
   cout<<"a:"<<a<<endl;
   cout<<"b:"<<b;
}
void ptrFun(int& x,int& y){
   int a;
   a=x;
   x=y;
   y=a;
}

引用改变数组值

// #include <iostream>
// using namespace std;
#include "head.h"
double arr[]={10.23,55,17};
int main()
{
   extern double& arrFun(int);
   arrFun(1)=11.77;
   cout << arr[1];
}
double& arrFun(int x){
   double& ref=arr[x];
   return ref;
}

 

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

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

相关文章

C语言入门教程||C语言 头文件||C语言 强制类型转换

C语言 头文件 头文件是扩展名为 .h 的文件&#xff0c;包含了 C 函数声明和宏定义&#xff0c;被多个源文件中引用共享。有两种类型的头文件&#xff1a;程序员编写的头文件和编译器自带的头文件。 在程序中要使用头文件&#xff0c;需要使用 C 预处理指令 #include 来引用它…

USART串口接收

文章目录 运行环境&#xff1a;1.1 串口接收代码分析1)开启接收中断和空闲中断2)接收存储变量声明和定义3)中断处理函数 2.1实验效果 运行环境&#xff1a; ubuntu18.04.melodic 宏基暗影骑士笔记本 stm32f427IIH6 stlink 9-24v可调电源 usb转串口 杜邦线转4pin 1.1 串口接收…

Python | 人脸识别+活体检测+背景模糊+关键点检测系统(Face_Recognition+dlib+OpenCV+MediaPipe+PyQt)

本博客为人脸识别系统项目简介 项目GitHub完整源代码地址&#xff1a; 一、运行环境 本系统能够运行在基于PC操作系统Windows环境下&#xff0c;要求Windows操作系统安装Python 3.9 及以上环境&#xff0c;且已安装MySQL数据库。 Python3.9 安装&#xff1a;Python 3.9安装教程…

【UE】坦克开火

1. 添加开火的操作映射 2. 创建一个actor蓝图类&#xff0c;添加一个静态网格体组件 添加发射物移动组件 设置初始速度和最大速度 发射物重力范围设为0.05 添加音频组件 设置音效 3. 打开炮管的静态网格体 在插槽管理器中创建插槽 将创建的插槽放到炮口位置 4. 打开“BP_BaseT…

B-Tree (多路查找树)分析-20230503

B-Tree (多路查找树)学习-20230503 前言 B-树是一类多路查询树&#xff0c;它主要用于文件系统和某些数据库的索引&#xff0c;如果采用二叉平衡树访问文件里面的数据&#xff0c;最坏情况下&#xff0c;磁头可能需要进行O(h)次对磁盘的读写&#xff0c;其中h为树的高度&…

探究Android插件化开发的新思路——Shadow插件化框架

Shadow插件化框架是什么&#xff1f; Shadow是一种Android App的插件化框架&#xff0c;它利用类似于ClassLoader的机制来实现应用程序中的模块化&#xff0c;并让这些模块可以在运行时灵活地进行加载和卸载。Shadow框架主张将一个大型的Android App拆分成多个小模块&#xff…

提升V-Ray渲染效率的五个实用技巧!

Chaos V-Ray是一个 3D渲染插件&#xff0c;可用于所有主要的 3D设计和 CAD程序。V-Ray可以和 3ds Max、Cinema 4D、Houdini、Maya、Nuke、Revit、Rhino、SketchUp和 Unreal无缝协作。艺术家和设计师也可以通过使用 V-Ray的实时光线来追踪探索和分享自己的项目&#xff0c;并渲染…

SpringBoot调取OpenAi接口实现ChatGpt功能

很高兴和大家分享我实现的一个小项目&#xff0c;利用 Spring Boot 实现了一个 ChatGpt 对话系统。在本文中&#xff0c;我将详细介绍这个项目的实现步骤&#xff0c;以及代码实现。 什么是 ChatGpt ChatGpt 是一种基于 GPT 技术的对话系统&#xff0c;能够生成连贯、流畅、…

V-Ray怎么快速渲染_渲染加速小技巧

很多小伙伴在使用V-Ray渲染器的时候都想要更加快速的出图&#xff0c;今天Renderbus瑞云渲染就给大家分享一下V-Ray渲染加速的小技巧。 在了解渲染加速技巧之前&#xff0c;我们首先要了解渲染制作主要受两个因素影响——图像质量和渲染时间&#xff0c;高图像质量是以长渲染时…

k8s集群搭建(3主2从)

目录 kubeadm 和二进制安装 k8s 适用场景分析 多 master 节点高可用架构图 集群环境准备 部署过程 修改主机内核参数&#xff08;所有节点&#xff09; 配置阿里云的repo源&#xff08;所有节点&#xff09; 配置国内安装 docker 和 containerd 的阿里云的 repo 源 配置…

day11 TCP连接管理与UDP协议

目录 ​编辑 连接的建立——”三次握手” 连接的释放——“四次挥手” 保活计时器 用户数据报协议 UDP​编辑 连接的建立——”三次握手” TCP 建立连接的过程叫做握手。 采用三报文握手&#xff1a;在客户和服务器之间交换三个 TCP 报文段&#xff0c;以防止已失效的连接…

SPSS如何进行多重响应分析之案例实训?

文章目录 0.引言1.多重响应变量频率分析2.对多重响应变量集进行交叉表分析3.使用表过程研究多重响应变量集 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对SPSS进行了学习&#xff0c;本文通过《SPSS统计分析从入门到精通》及其配套素材结合网上相关资料进行学习笔记…

对模式的迷信,大部分是幻觉和妄想

对模式的迷信&#xff0c;大部分是幻觉和妄想 往往有严重的投机心理 郑翔洲&#xff0c;所谓模式设计专家 还是有点虚&#xff0c;仅供一点参考 说苹果、说华为、说小米这些总结都是事后诸葛亮 趣讲大白话&#xff1a;商业模式被妖魔化 【趣讲信息科技153期】 ****************…

从零构建等保三级|安全狗一站式等保解决方案助用户快速过等保

一 政策法规下的等级保护 “没有网络安全就没有国家安全&#xff0c;没有信息化就没有现代化。” 在2017年6月1日&#xff0c;我国开始全面实行《网络安全法》&#xff0c;其中第二十一条规定了“国家实行网络安全等级保护制度”。此外&#xff0c;在2019年5月13日&#xff…

数据开发常见问题

目录 环境变量过多或者参数值过长时&#xff0c;为什么提交作业失败&#xff1f; 为什么Shell作业状态和相关的YARN Application状态不一致&#xff1f; 创建作业和执行计划的区别是什么&#xff1f; 如何查看作业运行记录&#xff1f; 如何在OSS上查看日志&#xff1f; 读…

阿里云服务器vCPU和CPU有什么区别?

阿里云服务器vCPU和CPU是什么意思&#xff1f;CPU和vCPU有什么区别&#xff1f;一台云服务器ECS实例的CPU选项由CPU物理核心数和每核线程数决定&#xff0c;CPU是中央处理器&#xff0c;一个CPU可以包含若干个物理核&#xff0c;通过超线程HT&#xff08;Hyper-Threading&#…

不坑盒子 (Office、WPS插件)高效办公,让你提前进入摸鱼状态。

不坑盒子简介 很多朋友在工作过程中需要对Word文档进行编辑处理&#xff0c;如果想让Word排版更有效率可以试试小编带来的这款不坑盒子软件&#xff0c;是一个非常好用的办公工具&#xff0c;拥有近百项功能的Word&#xff0c;wps插件&#xff0c;支持Office 2010以上的版本&a…

Python入门(二)变量和简单数据类型(一)

变量和简单数据类型&#xff08;一&#xff09; 1.变量1.1 变量的命名和使用1.2 变量其实是标签 2.字符串2.1 使用方法修改字符串的大小写2.2 在字符串中使用变量 2.3 使用制表符或换行符来添加空白2.3 使用字符串时应该避免的错误 作者&#xff1a;Xiou 1.变量 下面来尝试在…

System verilog【1】基础语法和数据类型+容器+结构体+不可综合的数据类型

前言 某种事情是不可能重新复原的&#xff0c;只能向前推进……不管什么地方&#xff0c;两人能去哪里就去哪里好了——《国境以南太阳以西》 \;\\\;\\\; 目录 前言内建数据类型reg和wire和logiclogic和bit四值和二值类型位宽类型转换隐式转换 常见数据类型定宽数组动态数组pa…

在Transformer模块上用CNN网络搭建方式解决图像分类问题

来源&#xff1a;投稿 作者&#xff1a;摩卡 编辑&#xff1a;学姐 论文标题&#xff1a;DeepViT: Towards Deeper Vision Transformer Motivation 本文受到传统CNN网络搭建方式的启发(深层的CNN网络可以学习到关于图像更加丰富和复杂的表示), 于是思考是否可以将这种搭建方式…