C++(标准输入输出流、命名空间、string字符串、引用)

C++特点及优势

        (1)实现了面向对象,在高级语言中,处理运行速度是最快;
        (2)非常灵活,功能非常强大,相对于C的指针优势,C++的优势为性能和类层次结构;
        (3)严谨、精确和数理化........

C++和C语言的区别

        C语言是面向过程的语言,C++是面向对象的语言。

        C++兼容C语言的头文件 #include <cstdio>

标准输入输出

输出流对象(std::cout<<)

        可以自动识别基本类型的输出类型

编译:g++ demo.cpp 

输入流对象(std::cin>>)

        自动识别基本类型的数据类型 

练习:输入一个字符 如果是大写 则转为小写 如果是小写则转为大写

#include <iostream>
int main()
{
	char c;
	std::cin >> c;
	if (c >= 'a' && c <= 'z')
	{
		//a = a - 32;
		std::cout << (char)(c - 32) << std::endl;
	}
	else if(c >= 'A' && c <= 'Z')
	{
		c += 32;
		std::cout << c << std::endl;
	}
	return 0;
}

cin同时获取多个值

#include <iostream>
int main(int argc, char const *argv[])
{
    int a;
    char c;
    std::cin >> a >> c;
    std::cout << a << " " << c << std::endl;
    return 0;
}

命名空间

        避免命名空间污染,C++的标准库都是在std命名空间中定义的(所有的类和对象)。

表示方法

        方式一:using namespace std;
        方式二:std::cout

自定义命名空间 

#include <iostream>
using namespace std;
namespace teacher
{
    char name[20] = "zhangsan";
    void showName()
    {
        cout << name << endl;
    }
}
namespace worker
{
    char name[20] = "lisi";
    void showName()
    {
        cout << name << endl;
    }
}
using namespace teacher;
using namespace worker;
int main(int argc, char const *argv[])
{
    //cout << name << endl;    //报错的位置
    cout << teacher::name << endl;
    cout << worker::name << endl;
    cout << "-----------" << endl;
    teacher::showName();
    worker::showName();
    return 0;
}

         teacher和worker命名空间中都有name,如果不写命名空间,会出现访问不明确的错误。 

C++增加bool类型

        (1)bool是基本数据用来表示逻辑真假
        (2)非0为真 true,0为假 false
        (3)增强程序可读性 int isFull();  bool isFull();

字符串处理

        (1)延续C风格,字符数组 char s[20] = "hello";        字符指针 char *s = "hello";
        (2)C++标准库中string类(string不是基本数据类型,而是类类型,对象类型)

创建string对象

#include <iostream> // iostream头文件中包含string头文件,所以可以省略
//#include <string>
using namespace std;
int main()
{
	string s1 = "hello world";
	string s2("hello s2");
	string s3(s2); // s3是用s2复制的string类型对象
	string s4 = s1; //string对象复制可以通过赋值符号=,直接将值赋予目标对象	
	cout << "s1:" << s1 << endl;
	cout << "s2:" << s2 << endl;
	cout << "s3:" << s3 << endl;
	cout << "s4:" << s4 << endl;
	return 0;
}

字符串拼接和比较

        string只能拼接string,拼接其他类型需要使用sprintf()进行复杂的字符串格式化

#include <iostream>
#include <string>
using namespace std;
int main()
{
	string s1 = "hello";
	string s2 = "world";
	s1 += s2;//把s2的字符串追加到s1后面
	cout<<s1<<endl;
	//s1 += 1;//错误 string类型的拼接,只能拼接string类型或者C风格字符串
	char buf[100];
	sprintf(buf,"%s%d",s1.c_str(),1);//c_str():string类型或者C风格字符串
	cout<<buf<<endl;
	//字符串比较
	cout<<(s1 == s2)<<endl; // 比较的是第一个不相等的ASCII码值
	cout<<(s1 != s2)<<endl;
	return 0;
}

empty和size函数

        empty()判断空,如果字符转为空,返回true;否则,返回false
        size()返回字符串长度,和strlen()相同 

#include <iostream>
using namespace std;
int main()
{
	string s1 = " ";
	cout << s1.empty() << endl;
	string s2 = "";
	cout << s2.empty() << endl;
	string s3 = "hello world";
	cout << s3.size() << endl;
	return 0;
}

cin和getline函数输入字符串

        cin遇到空格结束
        getline函数,输入字符串遇到'\n'结束输入(C++中无法使用gets函数,所以用此函数)

#include <iostream>
using namespace std;
int main()
{
	string s1;
	cout << "please input s1" << endl;
    // 参数1:cin输入流获取字符串,参数2:读取到的字符串存放为止
	getline(cin,s1);
	cout << "getine s1:" << s1 << endl;
	string s2;
	cout << "please input s2" << endl;
	cin >> s2;
	cout << "cin s2:" << s2 << endl;
	return 0;
}

引用

        引用的本质就是给变量起别名。

#include <iostream>
using namespace std;
int main()
{
    int a = 10;
    int& b = a;
    return 0;
}

特点(重点)

        (1)必须进行初始化
        (2)引用不能单独存在,也不能改变指向
        (3)普通引用不能用常量或者临时值进行初始化

引用作为形参类型 

交换a,b的值

#include <iostream>
using namespace std;
void swap(int& x,int& y)
{
	int temp;
	temp = x;
	x = y;
	y = temp;
}
int main()
{
	int a = 10,b = 20;
	swap(a,b);
	cout << a << " " << b << endl;
	return 0;
}

引用作为返回值

        引用作为返回值,是返回变量本身,而不是一个临时的值,要保证变量的生命周期足够长。

const修饰的引用(常引用)

指针的引用和数组的引用

引用和指针的区别(重点)

        (1)不存在空的引用,引用必须连接到一块合法的内存;指针可以是空指针。
        (2)引用被初始化为一个对象,就不能被指向到另一个对象;
                 指针可以在任何时候指向到另一个对象。
        (3)引用必须在创建时被初始化;指针可以在任何时间被赋值。

动态内存分配

        (1)堆区:自定义生命周期(只申请不释放堆区内存,会内存泄漏)
        (2)栈区:作用域结束,变量才释放
        (3)静态变量:程序结束才释放

动态内存的申请和释放 

        new和delete
        C++中new关键字(运算符)申请的内存空间是有类型的给内存初始化,返回指定类型的指针,并且可以自动计算所需大小。

申请变量

#include <iostream>
using namespace std;
int main()
{
    int* p = new int; // 指针变量p指向,在堆区申请一个int类型的内存
    *p = 10;
    delete p; // 释放new在堆区申请int类型空间
    p = NULL;
    return 0;
}

申请数组 

#include <iostream>
using namespace std;
int main()
{
    int* p = new int[10]; // 在堆区申请一个int类型的10个元素的数组
    delete[] p; // 释放数组
    p = NULL;
    return 0;
}

释放指针置空

        delete释放的是指针指向的内存,指针是一个变量,只有在程序结束时才被销毁。释放了内存空间后,原来指向这块空间的指针还是存在,只不过现在指针指向的内容垃圾区域,所以释放内存后把指针指向NULL,防止指针在后面不小心又被解引用。

new和malloc的区别(重点)

        (1)malloc是库函数;new是关键字(运算符)
        (2)malloc申请的空间没有类型(void *),需要强转;new申请的直接初始化
        (3)new会调用构造函数

函数延伸

重载

        英文叫做overload,C++中允许创建多个名称相同的函数,需要满足:
        (1)在同一作用域内,函数名相同,形参列表不同(类型或者个数不同),返回值不作为决定性条件;
        (2)如果参数列表相同,但返回值不同是不可以重载的。 

函数默认参数

        正常来说函数调用时,形参从实参获取值,但是还可以给形参一个默认值,这样形参就不必从实参取值了(一旦某个形参被赋予了默认值,那么其后面的所有形参都必须有默认值)。

        当函数的声明和定义分开写时,只能在声明的部分写默认参数

#include <iostream>
using namespace std;
void fun(int a = 10, int b = 20, int c = 30);
int main()
{
    fun();
    fun(1);
    return 0;
}
void fun(int a, int b, int c)
{
    cout << a << b << c <<endl;
}

类的初识

栈区创建对象

#include <iostream>
using namespace std;
class Student
{
public:
    string name;
    int age;
    void set(string n, int a)
    {
        name = n;
        age = a;
    }
};
int main(int argc, char *argv[])
{
    Student s; //栈区实例化对象
    //直接对成员变量赋值
    s.name = "zhangsan";
    s.age = 18;
    //调用成员函数间接赋值
    s.set("lisi",20);
    return 0;
}

堆区创建对象 

int main(int argc, char *argv[])
{
    Student *s = new Student() ; //在堆区创建一个Student类型对象
    //直接对成员变量赋值
    s->name = "zhangsan";
    s->age = 18;
    //调用成员函数间接赋值
    s->set("lisi",20);
    delete s;
    s = NULL;
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

书生营 L0G4000 玩转HF/魔搭/魔乐社区

模型下载 在codespace上给环境装包&#xff0c;按照教材即可 运行后下载成功 建立下载json文件 新建下载internlm2_5-chat-1_8b的json文件 运行结果 基本上没啥问题&#xff0c;照着教程来就行 模型上传&#xff08;可选&#xff09; push的时候需要先认证token 最后的…

人工智能+医学

医学影响的内型&#xff1a;(X光片、计算机断层扫描、磁共振成像、超声波&#xff09; ITK snap医学图像读取 医学影像领域常见任务: 图像分类、语义分割、疾病预测、目标检测、图像配准、图像生成(应用少)、图像增强、生成放射学报告。 需要有很强的可解释…

Xshell上Linux的基础指令

目录 1、Xshell的使用 2、Linux的常用命令 2.1 位置跳转命令 1、ls 2、cd 3、pwd 2.2 文件操作 1、touch 2、cat 3、echo 4、vim 2.3 目录操作 1、mkdir 2、rm 2.4 移动操作 1、mv 2、cp 2.5 命令手册 2.6 查找操作 2.7 进程展示 2.8 网络信息 3、搭建w…

JS | 详解图片懒加载的6种实现方案

目录 一、什么是懒加载&#xff1f; 二、为什么要懒加载&#xff1f; 三、图片懒加载的实现原理 四、图片懒加载实现方式 3.1 方案一&#xff1a;设置 img 标签属性 loading“lazy” 3.2 方案二&#xff1a;利用JS监听scroll滚动事件 3.3 方案三&#xff1a;利用元素的…

Aatrox-Bert-VITS2部署指南

一、模型介绍 【AI 剑魔 ①】在线语音合成&#xff08;Bert-Vits2&#xff09;&#xff0c;将输入文字转化成暗裔剑魔亚托克斯音色的音频输出。 作者&#xff1a;Xz 乔希 https://space.bilibili.com/5859321 声音归属&#xff1a;Riot Games《英雄联盟》暗裔剑魔亚托克斯 …

Redis——缓存

目录 前言 一、缓存基本概念 1.概念 2.二八定律 二、使用 Redis 作为缓存 三、缓存的更新策略 1.定期生成 2.实时生成 四、Redis 内存淘汰机制 1.通用淘汰策略 &#xff08;1&#xff09;FIFO &#xff08;2&#xff09;LRU &#xff08;3&#xff09;LFU &#…

机器学习在智能水泥基复合材料中的应用与实践

在人工智能与复合材料技术融合的背景下&#xff0c;复合材料的研究和应用正迅速发展&#xff0c;创新解决方案层出不穷。从复合材料性能的精确预测到复杂材料结构的智能设计&#xff0c;从数据驱动的材料结构优化到多尺度分析&#xff0c;人工智能技术正以其强大的数据处理能力…

Linux 权限的理解

内容摘要 本文内容包括shell的运行原理&#xff0c;包括外壳程序的原理、理解、和意义&#xff0c;以及从两个方面对于权限的理解&#xff08;人和事物的属性&#xff09;、修改文件的权限&#xff0c;包括修改文件的拥有者、修改文件拥有者所在的组的用户以及修改文件的三类用…

【linux】线程(二)

10. pthread_t 类型 注意&#xff1a; 每一个线程的库级别的tcb的起始地址&#xff0c;就是线程的 tid每一个线程都有自己独立的栈结构线程和线程之间&#xff0c;也是可以被其他线程看到并访问的&#xff08;比如全局函数&#xff09; 代码 如果想要进程拥有私人的全局变量(即…

关于武汉芯景科技有限公司的限流开关芯片XJ6288开发指南(兼容SY6288)

一、芯片引脚介绍 1.芯片引脚 二、系统结构图 三、功能描述 1.EN引脚控制IN和OUT引脚的通断 2.OCB引脚指示状态 3.过流自动断开

C++ [项目] 恶魔轮盘赌

现在才发现C游戏的支持率这么高&#xff0c;那就发几篇吧 零、前情提要 此篇是我与 同学的共创,他负责写人,我负责写机,简称人机, 不过有一点小插曲…… 一、基本介绍 支持Dev-C5.11版本(务必调为英文输入法),基本操作看游戏里的介绍,怎么做的……懒得说,能看懂就看注释,没有…

Vue3结合vue-plugin-hiprint实现自定义打印模板设计与布局

简介 在现代Web应用开发中&#xff0c;打印功能是不可或缺的一部分&#xff0c;尤其是在需要输出标准化文档的场景下。本文将详细介绍如何在Vue3项目中利用vue-plugin-hiprint插件实现一个可定制的打印模板设计器&#xff0c;并通过具体示例来展示其配置与使用方法。 技术栈 …

Python如何导入模块及常见的导入方法

&#x1f600;前言 在 Python 编程中&#xff0c;模块&#xff08;Module&#xff09;是非常重要的工具。它们可以帮助我们将代码进行逻辑分割和复用&#xff0c;从而提高代码的可读性和可维护性。本文将详细介绍如何导入模块、使用常见的导入方法&#xff0c;并简要介绍一些常…

[分享] SQL在线编辑工具(好用)

在线SQL编写工具&#xff08;无广告&#xff09; - 在线SQL编写工具 - Web SQL - SQL在线编辑格式化 - WGCLOUD

若依微服务15 - RuoYi-Vue3 实现前端独立运行

正文开始&#xff1a; RuoYi-Vue3 使用 Vue3 Element Plus Vite 技术栈。 GitHub 开源地址&#xff1a;https://github.com/yangzongzhuan/RuoYi-Vue3 本文介绍使用若依提供的在线后端接口&#xff0c;仅启动前端项目并进行界面开发&#xff0c;而无需启动后端服务。 一、克隆…

Vue笔记-浏览器窗口改变时,重新计算表格高度并设置

当窗口大小改变时&#xff0c;你监听 window 对象的 resize 事件&#xff0c;然后在事件处理程序中重新计算表格的高度。在 Vue 中&#xff0c;可以在组件中通过 created 生命周期钩子来添加事件监听器&#xff0c;然后在组件销毁时移除事件监听器。 如下vue代码&#xff1a; …

33 类与对象 · 下

目录 一、构造函数的深入 &#xff08;一&#xff09;构造函数的其他特点 &#xff08;二&#xff09;使用例 1、Date类与Time类显示写 2、Date类与Time类写一部分 &#xff08;三&#xff09;总结 &#xff08;四&#xff09;初始化顺序小题目 二、类型转化 &#xff…

Linux Redis查询key与移除日常操作

维护老项目Express node 编写的后端程序、有这么一个方法、没有设置redis过期时间&#xff08;建议设置过期时间&#xff0c;毕竟登录生产服务器并不是每个人都有权限登录的&#xff01;&#xff01;&#xff01;&#xff09;。如果变动只能通过登录生产服务器、手动修改… 于…

@Autowired和@Resource的用法与区别

前言&#xff1a; Autowired 和 Resource 来自不同的“父类”&#xff0c;其中 Autowired 是 Spring 定义的注解&#xff0c;而 Resource 是 Java 定义的注解&#xff0c;它来自于 JSR-250&#xff08;Java 250 规范提案&#xff09;。当它们的实现类只有一个时&#xff0c;那…

github pages + hugo 搭建静态博客网站

体验地址 1. 起因&#xff0c; 目的: 其实6年前&#xff0c;我就写过这个。 项目代码 博客地址 最近想改写一下。 github 推荐的主题是 Jekyll&#xff0c; 我当时用的就是这个&#xff0c;感觉很麻烦。尤其是文章命名。 新的主题 hugo 用起来还行。 2.过程: 过程记录&am…