(一)C++学习笔记(满满的都是水货咕噜!)

news2024/9/22 7:30:59

1、基本概念

1 – 什么是C++

c++就是c语言的扩展,完全兼容c语言
c++语言在c语言的基础上添加了面向对象编程和泛型编程的支持。c++继承了c语言高效,简洁,快速和可移植的传统。
c++融合了3种不同的编程方式:
c语言代表的过程性语言.
c++在c语言基础上添加的类代表的面向对象语言.
c++模板支持的泛型编程。

c语言和c++语言的关系:
c++语言是在C语言的基础上,添加了面向对象、模板等现代程序设计语言的特性而发展起来的。两者无论是从语法规则上,还是从运算符的数量和使用上,都非常相似,所以我们常常将这两门语言统称为“C/C++”。

C语言和C++并不是对立的竞争关系:
1.C++是C语言的加强
2.C++是以C语言为基础的,并且完全兼容C语言的特性。

2 – 面向对象的编程(类、对象)

c语言是面向过程的编程,所以写代码时主要在逻辑之前需要考虑每一个功能的实现

c++语言是面向对象的编程,所以很多基础功能别人都已经封装好,程序员只需要写逻辑即可,大大减少了基本语言的编写,使的编程变得高效简单

说道面向对象的语言,离不开类和对象
类:类似于结构体,可以理解为是一种构造数据类型,只不过类可以进行封装(可以在类中定义函数等等)
对象:类似一个结构体变量,通过这个对象,可以访问类中的成员

3 – c++三要素(封装、继承和多态)
封装:c语言中的结构体中只能定义数据类型(基本数据类型和构造数据类型),但是不能定义函数,而c++语言可以定义函数,这个地方就体现出了封装性

继承:可以将一个类中的成员继承给另一个类,并且两个类独立,这样大大减少了相同代码的编写,是的代码的可重用性增加

多态:在c语言中用一个代码中不能出现相同的函数名,例如求和,如果类型不同则需要编写不同的函数,但是在c++语言中可以在一个代码中利用一个函数名编写不同参数的函数
函数重载、虚函数

3 – c++三要素(封装、继承和多态)

封装:c语言中的结构体中只能定义数据类型(基本数据类型和构造数据类型),但是不能定义函数,而c++语言可以定义函数,这个地方就体现出了封装性

继承:可以将一个类中的成员继承给另一个类,并且两个类独立,这样大大减少了相同代码的编写,是的代码的可重用性增加

多态:在c语言中用一个代码中不能出现相同的函数名,例如求和,如果类型不同则需要编写不同的函数,但是在c++语言中可以在一个代码中利用一个函数名编写不同参数的函数
函数重载、虚函数

2、第一个代码

1 – 在终端输出hello world

在这里插入图片描述

2 – QT中代码的编写

(1)安装QT
直接下载软件包安装即可,注意要使用英文路径

(2)创建c++工程
选择文件–>点击创建文件或者项目–>选择Non-Qt Project–>选择c++点击确定–>设置项目名称和保存路径(必须是英文名字和英文路径)

(3)修改qt编码格式
由于qt是安装在windows环境下的,所以需要修改为windows能够识别的编码格式
工具–>选项–>文本编辑器–>行为–>在文件编码中选择GB2312或者GBK就可以了

3 – 代码基本的解释

//#include:预处理指令,用来包含头文件
//iostream:有点类似stdio.h,保存了与标准输入输出相关的一些信息
#include <iostream>

//使用名为std的命名空间
//std:本质是一个命名空间,里面保存了标准输入输出的类的对象
using namespace std;

int main(int argc, char *argv[])
{
    //cout:标准输出,类似printf
    //endl:用于换行
    //<<:用于连接要输出的内容
    cout << "Hello World!" << endl;
    cout << "nihao beijing" << endl << "welcome to qf" << endl;
    cout << "你好, 北京" << endl;

    return 0;
}

3、域解析符(作用域运算符) – ::

#include <iostream>

using namespace std;

int a = 100;

int main(int argc, char *argv[])
{
     cout  << "a = " << a << endl;

    int a = 888;
    cout  << "a = " << a << endl;

    //域解析符:主要用于在函数中调用全局定义的变量或者命名空间等等
    //作用域运算符可以用来解决局部变量与全局变量的重名问题
    cout << "a = " << ::a << endl;

    return 0;
}

执行结果
在这里插入图片描述

4、命名空间

#include <iostream>

using namespace std;

//定义命名空间
//命名空间的目的就是为了方便多人编程时出现相同的全局变量或者函数名而造成不知道调用哪一个的问题
namespace zhangsan {
    int a = 666;

    void myprint()
    {
        cout << "My name is zhangsan" << endl;
    }
}

namespace lisi {
    int a = 888;

    void myprint()
    {
        cout << "My name is lisi" << endl;
    }
}

void test1()
{
    //命名空间中的成员需要用过命名空间后加域解析符进行访问
    cout << "a = " << zhangsan::a << endl;
    cout << "a = " << lisi::a << endl;
    zhangsan::myprint();
    lisi::myprint();
}

void test2()
{
    cout << "a = " << zhangsan::a << endl;
    cout << "a = " << lisi::a << endl;

    //使用如下形式可以在当前函数中使用指定变量时不需要通过命名空间来获取
    using zhangsan::a;
    using zhangsan::myprint;

    cout << "a = " << a << endl;
    myprint();

}

void test3()
{
    cout << "a = " << zhangsan::a << endl;
    cout << "a = " << lisi::a << endl;

    //当前形式是使用名为zhangsan的命名空间,所以下面内容就可以直接使用zhangsan中的所有成员
    using namespace zhangsan;

    cout << "a = " << a << endl;
    myprint();

}

//匿名命名空间:没有名字的命名空间,只能在当前代码中使用,不能再其他代码中调用,类似被static修饰的变量或者函数
namespace{
    int a = 100;
    int b = 200;
}

void test4()
{
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
}

//给命名空间取别名
void test5()
{
    cout << "a = " << zhangsan::a << endl;

    namespace wangwu = zhangsan;
    cout << "a = " << wangwu::a << endl;
}

int main(int argc, char *argv[])
{
    test3();

    return 0;
}

5、标准输入和标准输出

#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    //cout:标准输出,实际是一个类的对象
    cout << "Hello World!" << endl;
    cout << "你好 北京" << "hello 北京" << endl;

    int a = 100;
    cout << a << endl;

    char str[] = "hello world";
    cout << str << endl;

    //cin:标准输入,实际也是一个类的对象
    //注意:默认在qt中不能进行标准输入,需要调出命令终端
    //在左侧的菜单栏中选择项目-->选择Build&Run中的Run-->在运行位置有一个Run inteminal打钩即可
    //int num;
    //cin >> num;
    //cout << "num = " << num << endl;

    int num1, num2;
    cin >> num1 >> num2;
    cout << num1 << " " << num2 << endl;

    return 0;
}

6、C++和C语言中结构体的区别

1 – C语言中的结构体

#include <stdio.h>

struct China{
    char name[32];

    //C语言中结构体是不能包含函数的,只能包含基本数据类型和构造类型的成员
//    void myfun()
//    {
//        printf("hello world\n");
//    }
};

struct Foreigner{
    char name[32];
};

void China_speak(struct China *a)
{
    printf("%s是一个中国人\n", a->name);
}

void Foreigner_speak(struct Foreigner *b)
{
    printf("%s is foreigner\n", b->name);
}

void test1()
{
    //在C语言中定义结构体变量必须加struct,否则报错
    struct China a = {"张三"};
    China_speak(&a);

    struct Foreigner b = {"lucy"};
    Foreigner_speak(&b);

    //由于c语言没有封装性,所以函数调用时可能会出现歧义
    China_speak(&b);
}

int main(int argc, char *argv[])
{
    test1();

    return 0;
}

2 – C++中的结构体

#include <iostream>

using namespace std;

struct China{
    char name[32];

    //c++结构体具有封装性,所以可以在里面定义函数
    void speak()
    {
        printf("%s是一个中国人\n", name);
    }
};

struct Foreigner{
    char name[32];

    void speak()
    {
        printf("%s is foreigner\n", name);
    }
};

void test1()
{
    //C++中定义结构体变量时可以不加struct
    China a = {"张三"};
    a.speak();

    Foreigner b = {"lucy"};
    b.speak();
}

int main(int argc, char *argv[])
{
    test1();

    return 0;
}

7、函数重载

#include <iostream>

using namespace std;

//函数重载
//在C++中,在同一个代码里面只要保证参数的个数或者参数的类型不同,可以使用相同的函数名
int MyAdd(int a, int b)
{
    cout << "1" << endl;
    return a + b;
}

float MyAdd(float a, float b)
{
    cout << "2" << endl;
    return a + b;
}

void MyAdd()
{
    cout << "3" << endl;
    printf("hello world\n");
}

int MyAdd(int a)
{
    cout << "4" << endl;
    return a;
}

//注意:函数重载时不能只以函数的返回值作为函数重载的条件
//int MyAdd()
//{
//    cout << "5" << endl;
//    int a = 888;
//    return a;
//}

void test1()
{
    cout << MyAdd(10, 20) << endl;
    //如果带小数的默认是double类型,如果是float类型,需要加f
    cout << MyAdd(10.123245632323452f, 20.452234523453452f) << endl;

    MyAdd();
    cout << MyAdd(10) << endl;
}

//注意:如果函数重载和缺省参数一起使用时,一定注意二义性
void myfun(int a, int b, int c = 100)
{
    cout << a << " " << b << " " << c << endl;
}

void myfun(int a, int b)
{
    cout << a << " " << b << endl;
}

void test2()
{
    myfun(10, 20, 30);
    //myfun(10, 20);
}
int main(int argc, char *argv[])
{
    test1();

    return 0;
}

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

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

相关文章

爬虫 Web Js 逆向:RPC 远程调用获取加密参数(2)使用 JsRPC 框架

RPC (Remote Procedure Call) 是远程调用的意思。 在 Js 逆向时&#xff0c;本地可以和浏览器以服务端和客户端的形式通过 WebSocket 协议进行 RPC 通信&#xff0c;这样可以直接调用浏览器中的一些函数方法&#xff0c;不必去在意函数具体的执行逻辑&#xff0c;可以省去大量的…

苹果macOS 15 Sequoia投屏功能 实现Mac上iPhone桌面管理

8月14日消息&#xff0c;苹果最新的 iOS 18 和 macOS 15 Sequoia 测试版为 iPhone 投屏功能带来了重大更新。用户可以直接在 Mac 上管理 iPhone 桌面。 iPhone 镜像功能 macOS Sequoia最大的更新是带来了iPhone 镜像功能&#xff0c;这个功能能让给 Mac 用户将 iPhone 的屏幕镜…

免费版音频格式转换器哪个好用?6大热门工具对比

在数字音频领域&#xff0c;音频格式转换已成为日常生活和工作中必不可少的一部分。无论是为了适配不同的设备&#xff0c;还是为了压缩音频文件以节省存储空间&#xff0c;音频格式转换器都能为我们提供极大的便利。市面上有众多免费版音频格式转换器&#xff0c;但哪些工具真…

【向量数据库】Ubuntu编译安装FAISS

参考官方的安装指导&#xff1a;https://github.com/facebookresearch/faiss/blob/main/INSTALL.md&#xff0c;不需要安装的可以跳过 ~$ wget https://github.com/facebookresearch/faiss/archive/refs/tags/v1.8.0.tar.gz ~$ tar -zxvf v1.8.0.tar.gz ~$ cd faiss-1.8.0 ~$ …

舵机模块学习

舵机是一种根据输入PWM信号占空比来控制输出角度的装置 执行逻辑&#xff1a;PWM信号输入到控制板&#xff0c;给控制版一个指定的目标角度&#xff0c;然后电位器检测输出轴的当前角度&#xff0c;如果大于目标角度&#xff0c;电机反转&#xff0c;小于正转&#xff0c;最终使…

Yearning开源SQL审核平台本地Linux系统部署与远程登录语句审核

文章目录 前言1. Linux 部署Yearning2. 本地访问Yearning3. Linux 安装cpolar4. 配置Yearning公网访问地址5. 公网远程访问Yearning管理界面6. 固定Yearning公网地址 前言 本文主要介绍在 Linux 系统简单部署 Yearning 并结合 cpolar 内网穿透工具实现远程访问&#xff0c;破除…

【Datawhale AI夏令营第四期】 魔搭-大模型应用开发方向笔记 Task01 DeepSeek简易AI助手

【Datawhale AI夏令营第四期】 魔搭-大模型应用开发方向 Task01 正处于拿毕业证求职和实习离职期间的过渡期&#xff0c;想着闲着也是闲着&#xff0c;索性拉上本科同学队友报名参加AI比赛&#xff0c;想方设法卷个项目经验出来。 Task1的任务主要是体验从0开始搭建一个AI对…

联想季度收入强劲增长,全球PC市场回暖

联想季度收入显著增长 2024年8月14日&#xff0c;北京——中国科技巨头联想集团公布了其第一季度财报&#xff0c;收入同比增长20%&#xff0c;达到了154亿美元。这一增幅超过了LSEG调查分析师预期的141亿美元。这一财报标志着联想在经历了连续五个季度的收入下滑后&#xff0…

seata的使用(SpringBoot项目整合seata)

文章目录 1、解压 seata-server-1.7.1.zip2、启动 双击 seata-server.bat3、启动 seata 控制台用户界面4、所有分布式事务相关数据库要有undo-log5、项目引入seata依赖6、项目添加seata配置7、代码实现&#xff1a; 1、解压 seata-server-1.7.1.zip 2、启动 双击 seata-server.…

基于springboot在线课程管理系统的设计与实现

TOC springboot236基于springboot在线课程管理系统的设计与实现 绪论 1.1 选题背景 目前整个社会发展的速度&#xff0c;严重依赖于互联网&#xff0c;如果没有了互联网的存在&#xff0c;市场可能会一蹶不振&#xff0c;严重影响经济的发展水平&#xff0c;影响人们的生活…

上万张看图背单词图片英语图片#看图猜单词#

看图背英语类的数据没有搞到很多的&#xff0c;之前只有《800多小学生看图背单词ACCESS数据库》以及其他一些几百条的记录&#xff0c;而今天弄到了上万英语单词的图片&#xff0c;今天这份数据只有图片没有其他的数据&#xff0c;你可以使用其他的英语单词数据库和图片进行关联…

群晖NAS本地搭建可远程交互的大型语言模型LLM聊天机器人

文章目录 前言1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 前言 本文主要分享如何在群晖NAS本地部署并运行一个基于大语言模型Llama 2的个人本地聊天机器人并结合内网穿透工具…

零基础学习Redis(2) -- Redis安装与配置

Redis官方是并不支持Windows系统的&#xff0c;并且现在绝大部分公司都是使用的Linux&#xff0c;所以我们在Linux上进行安装&#xff0c;这里我使用的是Ubuntu 1. 安装步骤 1. 首先使用工具连接到我们的云服务器&#xff0c;然后输入apt指令搜索redis相关的软件包&#xff1…

【扒代码】roi_align的定义

这段代码是一个名为 roi_align 的函数的部分实现&#xff0c;它用于执行区域兴趣&#xff08;RoI&#xff09;对齐操作&#xff0c;通常用于计算机视觉任务中&#xff0c;例如目标检测和分割。这个函数的主要目的是从输入特征图中提取特定区域&#xff0c;并将这些区域调整到指…

8.14 Day19 Windows服务器(Windows service 2008 R2)上域的搭建 (2)

1、在活动目录中创建OU 2、OU的规划例题&#xff1a; 在新添加的域控制器中&#xff0c;使用“Active Directory用户和计算机”创建北京分公司的OU&#xff0c;并创建市场部、技术部和财务部等三个子OU。 若真要删除&#xff0c;则如下操作&#xff1a; 所有OU规划完成 3、域…

Docker Containerd初体验

Docker Containerd概述 ​ Containerd是一个开源的容器运行时&#xff0c;它提供了一种标准化的方式来管理容器的生命周期。该项目最初是由Docker开发团队创建的&#xff0c;并在后来成为了一个独立的项目&#xff0c;被纳入了Cloud Native Computing Foundation&#xff08;C…

零基础学习大模型

揭秘大模型智能背后的神秘力量 前言 在这个信息爆炸的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到我们生活的方方面面。其中&#xff0c;大模型&#xff08;LLM&#xff09;以其强大的语言处理能力和广泛的应用场景&#xff0c;成为了AI领域的一颗璀璨明珠…

用这工具开发go语言程序,谁都可以成为程序员

前言 在之前有关TitanIDE的文章中&#xff0c;展示了使用TitanIDE开发任何一种语言的程序都显得尤为简单&#xff0c;所以毫无例外的&#xff0c;我们在TitanIDE开发一个go程序同样简单&#xff0c;话不多说&#xff0c;上才艺 在TitanIDE开发你的第一个go程序 1.创建go项目…

【海贼王航海日志:前端技术探索】一篇文章带你走进JavaScript(二)

目录 1 -> 基础数据类型 1.1 -> 条件语句 1.1.1 if语句 1.2 -> 分支语句 1.2.1 -> switch语句 1.3 -> 循环语句 1.3.1 -> while循环 1.3.2 -> continue 1.3.3 -> break 1.3.4 -> for循环 1.4 -> 数组 1.4.1 -> 创建数组 1.4.2 -…

骂极氪背刺老车主?买车前先把握这三个原则

文 | AUTO芯球 作者 | 雷慢 极氪001的老车主该不会绝望了吧&#xff0c; 刚极氪官方确认了&#xff0c;24款极氪001无法升级到新款的浩瀚智驾&#xff0c; 但老款的智驾系统也会持续更新。 难怪大家要闹。 上周早些时候&#xff0c;我路过极氪的门店还奇怪呢&#xff0c; …