当前位置: 首页 > 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…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...