qt学习篇---C++基础学习

news2025/2/22 7:31:44

本学习笔记学习下面视频总结,感兴趣可以去学习。讲的很详细

【北京迅为】嵌入式学习之QT学习篇_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1tp4y1i7EJ/?spm_id_from=333.337.search-card.all.click&vd_source=8827cc0da16223b9f2ad8ae7111de9e2

目录

C++

1.C++和C语言区别

2.C++的类

3.什么是对象

4.类的函数成员

5.类的访问修饰符

C++基本特性

1.类函数的重载特性

2.构造函数和析构函数

3.类的继承

4.虚函数和纯虚函数


C++

1.C++和C语言区别

c++是面向对象,c语言是面向过程

比如直接计算a+b是面向过程,给a+b穿上一层衣服就是面向对象,不是直接相加。

2.C++的类

c结构体升级版,类成员不止可以是变量也可以是函数。

定义:

class student
{
public:          //类的访问修饰符
    char name[64];
    int age;
};

3.什么是对象

类的实例化。

//直接定义
student my;   //student就是类,my就是对象   
//在堆里面定义
student *my = new student;

//C++中进行动态内存分配的一个例子。它在堆上创建了一个新的"student"类的对象,并将该对象的地址赋给指针变量"my"。这样可以让你使用超出对象创建函数或块的范围的对象。只需记得在使用完对象后使用"delete"关键字来正确释放内存,以防止内存泄漏

访问和c一样

    student my;
    student *my1 = new student;
    my.age = 18;
    my1->age = 19;
    cout << my.age <<endl;
    cout << my1->age <<endl;

堆(heap)和栈(stack)是两种不同的内存分配方式,它们在内存中的位置和分配方式有所不同。

栈是一种线性的数据结构,它是一块连续的内存空间,存储程序在运行过程中的临时数据和函数调用。栈的大小受限于系统设置的栈大小,通常比较小,变量的分配和释放是自动的,由系统自动管理,每次只能访问栈顶元素。

       

堆是一种动态分配的内存空间,它的大小不受限制,程序员可以根据需要动态分配和释放内存。堆的内存分配和释放由程序员手动管理,需要注意内存泄漏的问题。

在C++中,使用new和delete操作符可以分别在堆上动态分配内存和释放内存;在Java中,使用new关键字来在堆上创建对象,而垃圾收集机制会负责释放内存。

4.类的函数成员

第一步:在类里面声名

第二步:实现这个函数。我们可以直接在类里面写,也可以在写在类的外面。

直接写在类里面

class student
{
public:
    char name[64];
    int age;
    void test(){
        cout << 123 <<endl;
    };
};

类外面

student::表示属于这个类里面的函数,不这样的话会识别成普通函数

class student
{
public:
    char name[64];
    int age;
    void test();
};
void student::test(){
     cout << 123 <<endl;
};

访问函数和访问变量是一样的。

5.类的访问修饰符

对类的成员进行权限管理。

public:表示函数和变量是公开的,任何人可以访问。

private:只能在自己的类里访问自己,不能通过对象来访问。

强行访问?先函数访问,再对象访问。可以输出。

protected:也是只能在自己的类里自己访问自己,但是可以被派生类来访问

C++基本特性

1.类函数的重载特性

我们可以在类里面定义同名的函数,但是参数不可以相同

class student
{
public:
    char name[64];
    int age;
    void test();
    void test(int i);
    
  private:
    int a;
};

重载函数在调用时会根据函数参数类型,然后去匹配相应的函数进行调用。如:

 my.test(20);

2.构造函数和析构函数

析构函数:假如我们定义了析构函数,当对象被删除或者生命周期结束,就会触发。

构造函数:假如我们定义了构造函数,对象被创建的时候就会触发。

构造函数可被重载,析构函数不行

 student *my1 = new student(10);

定义:

class student
{
public:
    student();
    char name[64];
    int age;
    void test();
    void test(int i);
  private:
    int a;
};

student::student(){
     cout << "hello" <<endl;
};

触发两次打印两句hello

名字和类名一模一样;析构函数前面加~,构造函数不用。

student::~student(){
     cout << "hi" <<endl;
};

 

int main()
{
    //test();
    student my;
    student *my1 = new student;
    my.age = 18;
    my1->age = 19;
    cout << my.age <<endl;
    cout << my1->age <<endl;
    my.test(20);
    delete my1;
    return 0;

当对象被删除或者生命周期结束,就会触发。打印2个hi。

3.类的继承

允许在新的类里面继承父类的public还有protected部分,private不能被继承

 当觉得这个类不好的时候,可以使用类的继承,添加我们需要的功能。

class 儿子:public爸爸{
    public:
    .........
    protected:
        
}
//例子
class mystudent:public student
{
public:
    int grade;
    
};

 访问。也是通过.和->来访问

    my2.grade = 1;
    my2.age = 15;
     cout << my2.grade <<endl;
      cout << my2.age <<endl;

 

4.虚函数和纯虚函数

虚函数:有实际定义的,允许派生类对他进行覆盖式的替换(子类覆盖),virtual来修饰。

纯虚函数:,没有实际定义的虚函数就是纯虚函数

 virtual void test(); //虚函数
    virtual test(){}  //纯虚函数

怎么定义一个虚函数?

用virtual修饰,虚函数是用在类的继承上的。

虚函数优点

可以预留接口(覆盖),方便封装

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

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

相关文章

Spring ai 快速入门及使用,构建你自己的ai

第一步&#xff1a;创建springboot项目 jdk必须是17及以上 1.8用不了 第二步 选择web和ai的依赖 选择openai 第三步 需要配置openai key 配置 分享个免费或的apikey的地方New API 会免费赠送1刀的token spring.application.namespringAI spring.ai.openai.base-urlhttps://ap…

封装形式,进化,DIP封装及键出方法

本文主要讨论芯片封装的主要形式&#xff0c;概念&#xff0c;以及芯片封装的演化&#xff0c;最后以DIP封装为例&#xff0c;分析键出方式。 1-IC封装的形式 IC 封装是指将组成电子器件的各个组成部分&#xff0c;包括半导体芯片、基板、管脚连接线等&#xff0c;按照要求布局…

【maven】pom文件详解和延伸知识

【maven】pom文件详解 【一】maven项目的pom文件详解【1】maven项目的目录结构【2】根元素和必要配置【3】父项目和parent元素【4】项目构建需要的信息【5】项目依赖相关信息&#xff08;1&#xff09;依赖坐标&#xff08;2&#xff09;依赖类型&#xff08;3&#xff09;依赖…

文件上传安全以及防止无限制文件上传

文件上传安全以及防止无限制文件上传 在网络应用中&#xff0c;文件上传是一项常见功能&#xff0c;用户可以通过它上传图片、文档或其他媒体文件。然而&#xff0c;如果没有适当的安全措施&#xff0c;文件上传功能可能成为安全漏洞的源头。本文将探讨文件上传过程中的安全风…

在网站源码后台增加响应式布局

一本教材上的网站源码&#xff0c;后台在手机上查看还是按照电脑的页面样式&#xff0c;不方便查看和发布新内容。教材上讲了响应式布局。对于页面结构简单的网站&#xff0c;可以利用响应式&#xff0c;使页面自动适用各种屏幕的分辨率。 今天在一个网站源码的后台使用了响应…

夸克网盘免费领取1TB空间的方法

夸克网盘背靠阿里这颗大树&#xff0c;经历了这两年的发展&#xff0c;用户规模早已是千万级体量&#xff0c;用户体验个人也觉得非常不错&#xff0c;并且在日臻完善的路上&#xff0c;必会越走越远。现在已经不能领取一个月会员&#xff0c;也没有了2TB免费空间的说法&#x…

基于python-flask技术的社区信息交流平台【数据库+15000文档】

预览 介绍 系统只需使用者通过电脑浏览器即可实现系统的访问和操作的WEB模式的信息化系统。为了保证系统数据的准确性、安全性的数据存储&#xff0c;系统应用MySQL数据库进行系统数据存储服务。根据对社区工作的深入调研和对社区居民的走访调查&#xff0c;详细分析整体系统的…

vue2左侧菜单栏收缩展开功能

目录 1. Main.vue页面代码 a. 修改侧边栏属性 b. 修改头部导航栏 c. 定义我们的变量 d. collapse函数 2. Header.vue页面代码 3. Aside.vue页面代码 vue2左侧菜单栏收缩展开目前是非常常见的&#xff0c;我们在日常开发过程中经常会碰到。这一小节我们就详细了解一下这个…

Spring IOC(二)

1. Bean的定义与获取 1.1 定义Bean 在Spring 中定义Bean的方式主要有三种&#xff1a; 1、基于XML配置文件的方式&#xff08;了解&#xff09;&#xff1a;通常会在配置文件中使用<bean>标签来定义Bean&#xff0c;并设置Bean的属性、依赖关系等信息。 2、基于注解的方…

基于Spring Boot的商务安全邮件收发系统设计与实现

基于Spring Boot的商务安全邮件收发系统设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 已发送效果图&#xff0c;用户可以对已发送信息…

javaweb学习week6

javaweb学习 九.登录认证 5.登录后下发令牌 生成令牌&#xff1a;引入JWT令牌操作工具类&#xff0c;登录完成后&#xff0c;调用工具类生成JWT令牌&#xff0c;并返回 代码实例&#xff1a; 6.Filter入门 概念&#xff1a;Filter过滤器&#xff0c;是Javaweb三大组件之一…

构建本地大语言模型知识库问答系统

MaxKB 2024 年 4 月 12 日&#xff0c;1Panel 开源项目组正式对外介绍了其官方出品的开源子项目 ——MaxKB&#xff08;github.com/1Panel-dev/MaxKB&#xff09;。MaxKB 是一款基于 LLM&#xff08;Large Language Model&#xff09;大语言模型的知识库问答系统。MaxKB 的产品…

【生活日常】听歌识曲失败后,寻找一首曲子的心路历程……

Have a nice day :) 0x00 事情经过 叶子现在心情很是激动&#xff01;是这样的…… 昨天下午呢&#xff0c;去了家不错的咖啡厅&#xff0c;点了杯冰美式&#xff0c;很不错&#xff01; 而且店里的 Marshall 音箱也很带劲&#xff01; 然后我听到了种类似 "合成器节奏…

SpringMVC进阶(过滤器解决中文乱码,处理json以及文件上传下载)

文章目录 1.中文乱码处理1.引出问题1.恢复原来取消掉的属性绑定2.启动服务器&#xff0c;引出问题 2.自定义中文乱码过滤器1.MyCharacterFilter.java2.web.xml配置过滤器&#xff08;这个解决乱码的过滤器放到最前面&#xff09;3.结果展示 3.使用Spring过滤器处理&#xff08;…

物联网通信网关的主要功能体现在哪些方面?-天拓四方

在信息化、智能化的时代&#xff0c;物联网技术的广泛应用正在逐渐改变我们的生活方式。物联网通过各种传感器和设备&#xff0c;将现实世界与数字世界紧密相连&#xff0c;从而实现智能化、自动化的生活和工作方式。作为物联网生态系统中的重要组成部分&#xff0c;物联网通信…

解决Pytorch的cuDNN error: CUDNN_STATUS_NOT_INITIALIZED

目录 1. 问题报错2. 可能原因2.1 GPU内存不足2.2 缓存问题2.3 CUDA和Pytorch版本不兼容2.4 CUDA和cuDNN版本不兼容 3. 验证CUDA是否可用4. 参考 1. 问题报错 在使用GPU加速模型训练的过程中经常会遇到这样的错误&#xff1a; RuntimeError: cuDNN error: CUDNN_STATUS_NOT_IN…

8_手眼标定总结_auboi5机械臂与海康平面相机

经过不断地学习与调试&#xff0c;不断地学习网络上其他同志分享的资料&#xff0c;opencv手眼标定迎来了阶段性结束。实际测试结果在机械臂坐标系中X方向差5mm左右。 代码参考《https://blog.csdn.net/wanggao_1990/article/details/81435660》 注意事项&#xff1a; ①标定…

开源相机管理库Aravis例程学习(五)——camera-api

开源相机管理库Aravis例程学习&#xff08;五&#xff09;——camera-api 简介例程代码函数说明arv_camera_get_regionarv_camera_get_pixel_format_as_stringarv_camera_get_pixel_formatARV_PIXEL_FORMAT_BIT_PER_PIXEL 简介 本文针对官方例程中的&#xff1a;03-camera-api…

Kafka(十二)Streams

目录 Streams1 什么式是流式处理2 流式处理的相关概念2.1 拓扑2.2 时间2.2.1 输入时间2.2.2 输出时间 2.3 状态2.4 流和表2.5 时间窗口2.5.1 测试时间窗口 2.6 处理保证 3 流式处理设计模式3.1 单事件处理3.2 使用本地状态3.3 多阶段处理和重分区3.4 使用外部查找&#xff1a;流…

HTML5(1)

目录 一.HTML5(超文本&#xff08;链接&#xff09;标记&#xff08;标签<>&#xff09;语言) 1.开发环境&#xff08;写代码&#xff0c;看效果&#xff09; 2.vscode 使用 3.谷歌浏览器使用 4.标签语法 5.HTML基本骨架&#xff08;网页模板&#xff09; 6.标签的…