C++概述

1    什么是面向对象】

概念上来说:就是以对象(具体的变量)为导向的编程思路
专注于:一个对象具体能实现哪些过程(哪些功能)
面向对象 = n * 面向过程

结论:面向对象需要做的事情
1:我们要想清楚,我们现在需要编写一个拥有哪些功能的对象 (面向对象的思路,C++编程)
2:再去为这个对象中的每一个功能做具体的实现(实际就是面向过程,c语言编程)

2    c++与c语言的一些区别

2.1    字符串类型


c语言的字符串,就是字符数组,不是一个变量
c++的字符串,就是一个变量

既然是变量,c++ 字符串就允许做以下的操作

string str = "123"
string ptr = "456"
str = ptr;
str == ptr;
str += ptr;

将c++字符串转换成c语言字符串(将string转换成const char* 类型)
const char* s = str.data();

2.2    bool 类型


bool 类型的变量只有2个值:
true 或者 false
其实还是 1 和 0,1表示真,即true,0表示假,即false

c++ 专门搞了个数据类型来表示 真或者假

2.3    标准输入输出


c语言标准输出:printf  c语言标准输入:scanf

c++ 的标准输出:cout  c++ 的标准输入:cin

2.4    auto 关键字


c语言中的auto:自动申请局部变量的意思,现代编译器基本都省略
c++中的auto:自动推导类型
    例如:
        auto a = 100
        则会将a推到成int类型
        auto b = 3.14
        自动将b推到成double类型
        。。。。
        其实就是根据 = 右侧的数据类型,自动推导 = 左侧的变量的类型

2.5    引用


引用的写法
int a = 10;
int& pa = a;

引用,本质上来说就是一个变量的别名、别称
当我们输出 pa 和 a (即一个引用和被改引用绑定的变量地址)的话
我们会发现2个地址是一模一样的
既然地址一样,就说明是同一个变量
既然是同一个变量,改a,pa会变,改pa ,a也会变

引用的特点
1:引用一旦绑定一个数据之后,就无法更换绑定了,永远与该数据绑定在一起
2:由于引用无法中途更换绑定对象,所以引用必须初始化,如果没有初始化,后续也没有机会为他绑定数据了
3:常量只能被常量引用绑定,但是反过来,变量即可以被普通引用绑定,也可以被常量引用绑定

引用和指针的区别
1:指针拥有一个独立的地址,地址上存放的是被指向的数据的地址
引用无法获取引用本身的地址,引用的地址即为变量的地址
2:指针中途允许随意改变指向
引用中途不能更改绑定
3:指针可以不初始化,也可以初始化为空
引用必须初始化,绑定一个具体数据
4:sizeof 指针 大小是 4或者8
sizeof 引用大小取决于被绑定的数据的类型

4    c++的第一个程序:输出hello world

#include <iostream>

using namespace std;

int main(){
    cout << "hello world" << endl;        
    return 0;
}

4.1    c++的头文件


c语言头文件的风格: #include <XXXX.h> 以.h结尾
c++头文件风格:#include <XXXX> 或者 #include <XXX.hpp>

早期开发c++的时候,c++ 为了统一c语言中的各种头文件风格,专门将c语言中的各种头文件,重新写了一遍
例如:将 stdio.h 写成了 cstdio,string.h 写成了 cstring
    统一的将几乎所有 c语言的头文件 前面加上 c,后面去掉.h
    即 xxx.h 改成了 cxxx
    
但是这个事情虎头蛇尾了,后面也没人提这个标准了
但是有一些代码还是会看见诸如
    #include <cstring>
    #include <ctime>
    这样的头文件,大家要反应过来,这是c语言的头文件


4.2    using namespace std:命名空间


命名空间用途:防止多个程序在分模块开发的时候,写出同名结构体定义 和 同名函数的问题

4.2.1    如何声明一个命名空间


namespace 命名空间名{
    写 结构体的自定义
    函数的声明
    函数的声明及定义
    全局变量声明
    全局变量的声明及定义    
};

4.2.2    如何使用指定的命名空间]


1    在一个作用域里面,写上代码:using namespace 命名空间名


在写有该语句的作用域当中,都会额外的去目标命名空间中 查询函数/结构体名/全局变量
namespace zs{
    void func(){
        cout << "张三的func" << endl;
    }
};

namespace ls{
    void func(){
        cout << "李四的func" << endl;
    }
}

/*
void func(){
    cout << "全局的func" << endl;
}
*/

int main(int argc,const char** argv){
        using namespace zs;// 说明:在main函数作用域中,所有的函数名,结构体名,全局变量名,都会 "额外" 的再去 命名空间 zs 中寻找一遍
        using namespace ls;
        func();
}

所以,using namespace 这种形式,简单是简单,但是很不好用
非常容易造成冲突

2    在一个作用域里面写上:using 命名空间名::函数名/结构体名/全局变量名


namespace zs{
        void func(){
            cout << "张三的func" << endl;
        } 
    
        struct Data{
            int a;
        };
};

namespace ls{
        void func(){
            cout << "李四的func" << endl;
        }
    
        struct Data{
            double a;
        };
};


void func(){
    cout << "全局的func" << endl;
}


int main(int argc,const char** argv){
        using zs::func;// 表明在当前作用域中,仅指定fun去zs命名空间中寻找,其他所有内容还是全局寻找
        func();// 所以此处即使全局也有一个func,因为通过上面的代码指定了func只去zs中寻找,所以不报错
}


但是这种写法虽然比 using  namespace 要好一点,依旧容易冲突
using zs::func
using ls::func
一眼报错

3    直接在函数名/结构体名/全局变量名前面加上 "命名空间名::"


zs::func()
表示调用 zs里面的func
ls::func()
表示调用ls里面的func
func()
表示调用全局的func

这种方式是最安全最常用的方式

4.2.3    :: 是什么东西


:: 是作用于运算符
例如    x::y 
    表明:使用y的时候(y可以是函数,结构体名,全局变量名),去x作用域中寻找y
    也可以表明,y是隶属于x作用域的

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 大视界 -- 基于 Java 的大数据隐私计算在医疗影像数据共享中的实践探索(158)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

数字化如何赋能食品抽检全流程升级,助力食品安全监管现代化

食品安全是关乎民众健康和社会稳定的重要问题。食品抽检作为保障食品安全的核心监管手段&#xff0c;通过对食品生产、加工、销售等环节的随机抽样检测&#xff0c;及时发现潜在的食品安全问题&#xff0c;防止不合格产品流入市场&#xff0c;同时为政府监管、企业自查和消费者…

HBase入门教程

HBase入门教程 HBase是一个开源的、分布式的、版本化的非关系型数据库&#xff0c;是Apache Hadoop生态系统的重要组成部分。本文将全面介绍HBase的基础知识&#xff0c;帮助你快速入门。 文章目录 HBase入门教程1. HBase简介1.1 什么是HBase&#xff1f;1.2 HBase核心特点 2.…

vscode连接服务器失败问题解决

文章目录 问题描述原因分析解决方法彻底删除VS Code重新安装较老的版本 问题描述 vscode链接服务器时提示了下面问题&#xff1a; 原因分析 这是说明VScode版本太高了。 https://code.visualstudio.com/docs/remote/faq#_can-i-run-vs-code-server-on-older-linux-distribu…

redis常用部署架构之redis分片集群。

redis 3.x版本后开始支持 作用&#xff1a; 1.提升数据读写速度 2..提升可用性 分片集群就是将业务服务器产生的数据储存在不同的机器上。 redis分片集群的架构 如上图所示&#xff0c;会将数据分散存储到不同的服务器上&#xff0c;相比于之前来说&#xff0c;redis要处…

Modbus主站EtherNet/IP转ModbusRTU/ASCII工业EIP网关串口服务器

型号 2路总线EIP网关 MS-A1-2021 4路总线EIP网关 MS-A1-2041 4路总线EIP网关&#xff08;双网口&#xff09; MS-A2-2041 8路总线EIP网关 MS-A1-2081 8路总线EIP网关&#xff08;双网口&#xff09; MS-A2-2081 EtherNet/IP 串口网关 EtherNet/IP 转 RS485 …

Centos7 安装 TDengine

Centos7 安装 TDengine 1、简介 官网&#xff1a; https://www.taosdata.com TDengine 是一款开源、高性能、云原生的时序数据库&#xff08;Time Series Database, TSDB&#xff09;, 它专为物联网、车联网、工业互联网、金融、IT 运维等场景优化设计。同时它还带有内建的缓…

基于社交裂变的S2B2C电商模式创新研究——以“颜值PK+礼品卡+AI智能名片“融合生态为例

摘要 本文构建了融合开源AI技术、社交裂变机制与S2B2C商业模式的创新模型。通过开发具备AI智能名片功能的商城小程序&#xff0c;实现用户日均停留时长提升171%、社交转化效率提高2.8倍的实证效果。研究发现&#xff1a;基于GAN的虚拟形象生成技术可降低用户决策成本32%&…

王者荣耀服务器突然崩了

就在刚刚王者荣耀服务器突然崩了 #王者荣耀崩了#的话题毫无预兆地冲上热搜&#xff0c;许多玩家发现游戏登录界面反复弹出异常提示&#xff0c;匹配成功后卡在加载界面&#xff0c;甚至出现对局数据丢失的情况。根据官方公告&#xff0c;目前技术团队已在全力抢修服务器 #王者…

LabVIEW医疗设备备用电源实时监控系统

开发了一个基于LabVIEW的医疗设备备用电源实时监控系统。系统提高医疗设备备用电源的管理效能与使用安全&#xff0c;通过实时监测与数据分析&#xff0c;确保医疗设施在电力供应中断时的可靠运行。 ​ 项目背景 医院中的医疗设备对电源的连续供应有着极高的要求&#xff0c;…

04-SpringBoot3入门-配置文件(多环境配置)

1、简介 在 SpringBoot 中&#xff0c;不同的环境&#xff08;如开发、测试、生产&#xff09;可以编写对应的配置文件&#xff0c;例如数据库连接信息、日志级别、缓存配置等。在不同的环境中使用对应的配置文件。 2、配置环境 # 开发环境 zbj:user:username: root # 测试环…

C++链表详解:从基础概念到高级应用

C++链表详解:从基础概念到高级应用 链表是计算机科学中最基础也是最重要的数据结构之一,它在内存管理、算法实现和实际应用中扮演着关键角色。本文将详细介绍链表的概念、类型、C++实现以及实际应用场景,帮助读者全面理解这一重要的数据结构。 文章目录 C++链表详解:从基础…

了解图像质量评价指标PSNR

一、PSNR是什么 1.1 定义与数学公式 峰值信噪比&#xff08;Peak Signal-to-Noise Ratio&#xff0c;PSNR&#xff09;是数字图像处理领域最经典的客观质量评价指标之一。其核心思想是通过计算原始图像与失真图像之间的均方误差&#xff08;MSE&#xff09;来衡量失真程度&am…

NX二次开发刻字功能——布尔运算

刻字功能在经历、创建文本、拉伸功能以后就剩下布尔运算了。布尔运算的目的就是实现文本时凸还是凹。这部分内容很简单。 1、首先识别布尔运算的类型&#xff0c;我这里用到一个枚举类型的选项&#xff0c;凸就是布尔求和&#xff0c;凹就是布尔求差。 2、其放置位置为创建拉伸…

《C语言实现金字塔图案打印》

&#x1f680;个人主页&#xff1a;BabyZZの秘密日记 &#x1f4d6;收入专栏&#xff1a;C语言练习题分享 &#x1f30d;文章目入 程序代码程序功能程序分析外层循环内层循环输出结果 示例运行总结 在学习编程的过程中&#xff0c;打印图案是一个非常有趣的练习&#xff0c;它可…

Shiro学习(一):Shiro介绍和基本使用

一、Shiro介绍 1、百科对shiro的定义如下&#xff1a; Apache Shiro 一个强大且易于使用的 Java 安全框架&#xff0c;它提供了身份验证、授权、加密和会话管理等功能。Shiro 的设计目标是简化企业级应用程序的安全性开发过程&#xff0c;同时保持代码的简洁和易于维护。 2、…

Java多线程与高并发专题——关于Condition

Condition接口 源码注释 还是老样子&#xff0c;看看源码注释&#xff1a; Condition factors out the Object monitor methods (wait, notify and notifyAll) into distinct objects to give the effect of having multiple wait-sets per object, by combining them with t…

JavaScript 性能优化实战:突破瓶颈,打造极致 Web 体验

在当今快节奏的互联网时代&#xff0c;用户对于 Web 应用的性能要求越来越高。一个响应迅速、流畅运行的 Web 页面能够极大地提升用户体验&#xff0c;反之&#xff0c;缓慢的加载速度和卡顿的交互则可能导致用户流失。JavaScript 作为 Web 开发的核心语言之一&#xff0c;其性…

《白帽子讲 Web 安全》之服务端请求伪造(SSRF)深度剖析:从攻击到防御

引言 在当今复杂的网络环境中&#xff0c;Web 应用安全犹如一座时刻需要精心守护的堡垒。随着技术的不断演进&#xff0c;各类安全威胁层出不穷&#xff0c;其中服务端请求伪造&#xff08;SSRF&#xff09;正逐渐成为令开发者与安全从业者头疼的一大难题。吴翰清在《白帽子讲…

Pandas的轴,axis=0,axis=1

八. Pandas的轴 axis0代表跨行&#xff08;down)&#xff0c;而axis1代表跨列&#xff08;across) 使用0值表示沿着每一列或行标签\索引值向下执行方法使用1值表示沿着每一行或者列标签模向执行对应的方法 下图代表在DataFrame当中axis为0和1时分别代表的含义: axis参数作用…