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

c++基础/类和对象

c++基础

2.1名字空间

namespace 防止命名冲突

说明:名字空间可以在全局作用域或其他作用域(另一个名字空间)内部定义,但不能在函数或类的内部定义。

使用:

#include<iostream>
using namespace std; //std中包含关键字,cin,cout等
namespace spaceA{int x;int y;
}
int main()
{spaceA::x = 8;  //1.名字空间名称::局部内容名称cout<<spaceA::x<<endl;spaceA::y = 9;  cout<<spaceA::y<<endl;// 2.using namespace 名字空间名称using namespace spaceA;x = 8;y = 9;cout<<x<<y;// 3.using spaceBusing spaceA::x;x=4;cout<<x;return 0;
}

2.2数据类型

基本数据类型:整型,实型,字符型,布尔型,无值型

非基本数据类型:复合数据类型,构造数据类型

 2.3 new和delete

指针变量的定义:

注意:ip 是指针变量, *ip是解引用(不要和int *ip 弄混)

int num ;
int *ip = &num; //定义一个整型指针变量
*ip = 4;  //解引用
// 解引用操作仅适用于那些确实指向了某个对象的有效指针

 为什么指针变量在定义时要说明其类型?

        指针变量保存的是地址, 如一个整型指针变量是4个字节,要访问内存时,要将4个字节全部读出来时才有意义。

new        &       delete

        new 内存分配

        delete 释放new分配的存储空间

#include<iostream>
using namespace std;
int main(){int *p;p = new int; //申请一个整型空间*p = 7;cout<<*p<<endl;delete p;   return 0;
}

注意:定义使用指针变量的方法

2.4引用

 2.5函数

 2.6参数传递

1.传值参数:

        当初始化一个非引用类型的变量时,初始值被拷贝给变量,此时,变量的改动不会影响初始值。

        当执行指针拷贝操作时,拷贝的是指针的值。拷贝之后,两个指针是不同的指针。

2.传引用参数

        通过使用引用形参,允许函数改变一个或多个实参的值。引用形参绑定初始化它的对象

2.7内联函数 

 调用函数一般比求等价表达式的值要慢一些。在大多数机器上,一次函数调用包含这一系类的工作: 调用前要保存寄存器,并在返回时恢复;可能需要拷贝实参;程序转换到另一个位置继续执行。

2.8重载函数

 2.9异常处理

 try & throw & catch ....

 类与对象

3.1类

类是具有相同属性和方法的一类对象集合的抽象

定义类就是对问题抽象和封装的过程。

类的定义:

 

  关键:在类体外定义成员函数

3.2对象

对象是类的实例或实体

 对象成员的访问:

point *point_p1;
point_p1 = &p1;
//定义一个指针,并且赋予指针意义,指向p1的地址
point_p1->set(1,2); //使用指针访问成员变量
p1.show();
(*point_p1).set(2,3); //使用对象访问成员
(&p1)->show()

 3.3类的界面和实现

point.h & point.cpp 分开实现

//point.cpp
#include<iostream>
#include "point.h"
using namespace std;
void point::set1(int a,int b)
{x = a;y = b;
}
void point::show()
{cout<<x<<y<<endl;
}
//point.h
class point
{
private:int x,y;
public:void set1(int a,int b);void show();
};
//main.cpp
#include<iostream>
#include "point.h"
using namespace std;
int main(){point p1;p1.set1(1,1);p1.show();return 0;
}

3.3.1构造函数

构造函数是一种特殊的成员函数,对象的创建初始化由它来完成。

 1.构造函数不能是私有的;

2.构造函数可以重载,可以带一个参数,也可以不带参数。

3.3.2成员初始化列表

 冒号后面就是成员初始化表:可以使用引用&,

 3.3.3具有默认参数的构造函数

 3.3.4析构函数(重点)

特点:释放对象,回收空间

自动被调用

析构函数自动被调用 

 3.3.5拷贝构造函数

定义:

 特点:

 3.3.6浅拷贝和深拷贝

 

  1.  能满足已知对象去初始化未知对象,用默认的拷贝构造函数可以实现,浅拷贝
  2.  如果一个类中含有指针类型的变量,浅拷贝会出现错误 ,需要自己写拷贝构造函数。这种拷贝就是深拷贝。 
#include<iostream>
#include<cstring>
using namespace std;
class String
{char *buf;  //用来存放字符串的int length;//表示字符串的长度
public:String()    //不带参数的构造函数,创建一个空串{length = 0;    //串长为0buf = new char; buf[0] = '\0';//字符串的结束符}String(char *s)   //用字符串初始化{length=strlen(s);buf = new char[length+1];//开辟空间,对一个空间放'\0'字符串的结束符strcpy(buf,s);}//拷贝构造函数String(const String &s){length = s.length;//buf = s.buf; 错误的方法buf = new char[length+1];strcpy(buf,s.buf);cout<<"我是默认拷贝构造函数,深拷贝"<<endl;}~String()      //析构函数,回收空间{delete[] buf;}void show(){cout<<buf<<endl;}
};
int main()
{String s1((char *)"helloworld!"); //需要强制类型转换一下s1.show();String s2 = s1; //拷贝一下s2.show();return 0;
}

拷贝成功

 3.4this指针

用途:

①区分成员和非成员

 上面的方式是不对的,正确的赋值方式

 ② 类的方法需要返回当前对象的引用

   3.5向函数传递对象 

                                                              

3.6类的静态成员                                                        

 

 

#include<iostream>
using namespace std;
class student{public:static int count;static double total;student(double score){this->score = score;count++;total+=score;}static double getAverage(){return total/count;}private:double score;
};
int student::count = 0;
double student::total = 0;  //初始化成员int main()
{student s1(70),s2(90);cout<<s1.getAverage()<<endl;  //通过对象去访问cout<<student::getAverage()<<endl; // 通过类名访问,static 类里面的静态全局变量return 0;
}

3.7类的友元

 

//一个类的成员函数作为另一个类的友元使用
#include<iostream>
using namespace std;
class girl; //声明一下
class boy
{string name;public:boy(string nm){name = nm;}void introduce(){cout<<"i am "<<name<<endl;}void introducefriend(girl &x);  
};
class girl
{string name;public:girl(string nm){name = nm;}void introduce(){cout<<"i am"<<name<<endl;}friend void boy::introducefriend(girl &x);//声明boy的成员函数introducefriend是girl的友元函数
};
void boy::introducefriend(girl &x)
{cout<<"she is "<<x.name<<endl;
}
int main()
{boy boy1("tom");girl girl1("alice");boy1.introduce();boy1.introducefriend(girl1);return 0;
}

3.8对象成员

一个类的对象是另一个类的数据成员

A的对象a是B的数据成员。

 3.9const

 

相关文章:

c++基础/类和对象

c基础 2.1名字空间 namespace 防止命名冲突 说明&#xff1a;名字空间可以在全局作用域或其他作用域&#xff08;另一个名字空间&#xff09;内部定义&#xff0c;但不能在函数或类的内部定义。 使用&#xff1a; #include<iostream> using namespace std; //std中包…...

2023年中国人工智能产业趋势报告

易观&#xff1a;尽管2022年人工智能市场发展活跃度不及预期&#xff0c;但2022年对人工智能产业来说无疑是令人激动的一年。年中由DALL-E 2以及其后Stable Diffusion和Midjourney等文本-图像生成模型引起公众对人工智能生成内容的大量关注&#xff0c;年末ChatGPT的横空出世刷…...

STM32定时器的配置,解析预分频系数和重装载值与时钟频率的关系

&#x1f38a;【蓝桥杯嵌入式】专题正在持续更新中&#xff0c;原理图解析✨&#xff0c;各模块分析✨以及历年真题讲解✨都在这儿哦&#xff0c;欢迎大家前往订阅本专题&#xff0c;获取更多详细信息哦&#x1f38f;&#x1f38f;&#x1f38f; &#x1fa94;本系列专栏 - 蓝…...

解决Sql WorkBench中数据库不能重命名的问题

解决Sql WorkBench中数据库不能重命名的问题mysql不支持直接重命名数据库1. 连接到数据库2. 打开菜单&#xff0c;选择迁移向导3. 点击Start Migration4. 填写源数据库的相应参数5. 填写目标数据库的响应参数6. 稍等片刻&#xff0c;点击Next7. 选择你要迁移的数据库。8. 进入一…...

REFL: 联邦学习中智能的设备选择方法

原创 齐天宇 隐私计算研习社 收录于合集#联邦学习54个现有的FL方案使用随机的参与者选择来提高选择过程的公平性&#xff0c;但是这会导致资源的低效利用和较低的训练质量。本文系统地解决了FL中资源效率低效的问题&#xff0c;展示了智能参与者选择和合并来自落后参与者的更新…...

Linux:NFS服务器

目录NFS服务器的介绍例NFS服务器的介绍 1&#xff0c;NFS&#xff08;网络文件系统&#xff09;&#xff0c;主要用于服务器分享提供文件或文件系统等服务&#xff0c;与其他服务器有所不同&#xff0c;主打的是分享&#xff0c;所以没有配置文件&#xff0c;只需要在 /etc/ex…...

电子技术——数字逻辑反相器

电子技术——数字逻辑反相器 在学习完如何通过CMOS数字电路实现组合逻辑&#xff0c;接下来我们评估这种数字CMOS电路的性能。首先&#xff0c;我们考虑最基本的部件——反相器。 电压传导特性 下图是一个反相器的原理图&#xff1a; 在之前&#xff0c;我们已经介绍了MOSFE…...

python的多线程编程之锁

1、 背景概述 在上篇文章中&#xff0c;主要讲述了python中的socket编程的一些基本方面&#xff0c;但是缺少关于锁的相关概念&#xff0c;从而在这篇文章中进行补充。 由于在python中&#xff0c;存在了GIL&#xff0c;也就是全局解释器锁&#xff0c;从而在每次进行获得cpu的…...

Android Framework-进程间通信——Binder

我们知道&#xff0c;同一个程序中的两个函数之间能直接调用的根本原因是处于相同的内存空间中。 比如有以下两个函数A和B&#xff1a; /*Simple.c*/ void A() { B(); } void B() { }因为是在一个内存空间中&#xff0c;虚拟地址的映射规则完全一致&#xff0c;所以函数A和B之…...

有趣的小知识(二)浏览器内的秘密:了解Cookie基础知识

一、简介 Cookie是一种小型的文本文件&#xff0c;由Web服务器发送给Web浏览器&#xff0c;并存储在用户的计算机硬盘上。它通常用于记录用户的偏好、登录状态、购物车信息等&#xff0c;以便在用户下次访问该网站时能够提供更好的用户体验。Cookie通常包含网站的名称、Cookie的…...

Spring框架

DI:依赖注入IOC:控制反转AOP:面向切面IOC容器&#xff1a;存放管理各种对象Spring优势&#xff1a;低耦合。&#xff08;降低组件之间的关联性&#xff0c;实现软件各层之间的解耦&#xff09;声明式事务管理&#xff08;基于AOP来管理&#xff09;和其他框架的整合&#xff08…...

mysql8的表锁排查

information_schema.innodb_trx ##正在运行的事务信息。 sys.innodb_lock_waits ##处于锁等待的关联事务信息。 performance_schema.threads ##SQL线程及线程号、进程号、OS线程号等信息 # 查询锁的情况 select * from performance_schema.data_locks where object_name =t_xxx…...

【C语言】深度理解指针(上)

前言&#x1f30a;谈到指针&#xff0c;想必大家都不陌生。它不仅是C语言的重难点&#xff0c;还是不少C初学者的噩梦。本期我们将深度探讨一些较为复杂的指针以及指针的妙用&#xff0c;带领大家感受指针的魅力&#x1f61d;。首先&#xff0c;我们先来复习复习指针的概念&…...

最近我的视频播放浅学总结

因为想做一个类似苹果的同播共享功能&#xff0c;这一段时间对音视频做了一些浅浅的学习&#xff0c;现简单总结记录。 我的需求是找到一个尽可能简单的方案来两人播放一段视频&#xff0c;并且能够进度和操作同步&#xff0c;所以基本不能有延迟&#xff0c;同时能够显示WebV…...

【C/C++基础知识点】输出n位斐波那契数列

目录 前言什么是斐波那契数列兔子的故事小知识点收尾前言 在软件行业已经有快十年,技术虽然一般般,但是足够应付额解决编程入门的相关问题! 都说十年磨一剑,积累到一定经验,是时候发挥自己的价值,给予入门的同行些许的帮助! 为什么要写收费专栏,其实原因很简单,时间就…...

C语言拔高知识——指针的进阶(万字大文超详细)

在之前的文章中&#xff0c;我已经讲解过了初阶指针的内容&#xff0c;今天就来讲一讲指针的进阶&#xff01; 上篇指针地址&#xff1a;保姆式指针讲解&#xff0c;超详细&#xff0c;适合初学者_指针详解_陈大大陈的博客-CSDN博客 目录 1. 字符指针 2. 指针数组 3. 数组指…...

程序员推荐的良心网站合集!(第二期)

今天来给大家推荐几个程序员必看的国外良心网站合集第二期合集。 Semantic Schoolar 由微软联合创始人Paul Allen开发的免费学术搜索引擎&#xff0c;不仅可以通过时间线快速定位想要的文献&#xff0c;还有强大的筛选功能可以精准的找到自己想要的文献&#xff0c;想要什么搜…...

【Java核心知识】spring boot整合Mybatis plus + Phoenix 访问Hbase与使用注意

为了Phoenix能让开发者通过SQL访问Hbase而不必使用原生的方式&#xff1f;引用Phoenix官网上的一句话&#xff1a;SQL is just a way of expressing what you want to get not how you want to get it. 即SQL不是一种数据操作技术&#xff0c;而是一种特殊的表达方式。只是表示…...

lua实现游戏全局鼠标点击效果

前言 最近在优化项目,策划提了一个需求,需要实现一个通用点击特效。 尝试1 首先想到的是改变鼠标指针样式,这个以前学过,还有点印象,以前刚开始学unity的时候,记得看到过一个方法可以改变游戏中鼠标指针样式。 方法如下:选择“Edit”——>“Project Setting”,打…...

MyBatis源码分析(二、续)SqlSource创建流程,SQL如何解析?如何将#{id}变成?的

文章目录实例一、SqlSource处理入口二、SqlSource处理逻辑1、XMLScriptBuilder 构造方法2、解析动态sql3、DynamicSqlSource4、RawSqlSource解析sql&#xff08;1&#xff09;parse方法解析sql写在后面实例 此处我们分析的sql&#xff1a; <select id"selectBlog&quo…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...