初学C++,坚决不能挂!

news2024/11/23 20:58:10

目录

 1、C++相对于C语言的不同

2、类(class)

3、类与实例(对象)的关系

4、头文件

5、命名空间

6、输入输出

7、位运算

8、基本数据类型

9、结构体和三目运算符

10、for循环

11、const

12、类型别名typedef


如果你上理论课也听不懂老师在讲什么

不如现在开始自学一些吧

期末再看看速成课

一定可以过的

Good Luck!

 1、C++相对于C语言的不同

(1)C语言强调编程的算法,而面向对象(OOP)强调数据

(2)面向对象编程:将数据和方法合并在一起的类,并且具有继承与派生,多态等特性。继承是从旧类中派生出新类,多态为运算符和函数创建多个定义,通过编程上下文来确定使用哪个定义。

2、类(class)

类是具有相同属性和行为的一组对象的集合,它为属于它的全部对象提供了统一的抽象描述,其内部包括属性和行为两个主要部分,类是对象集合的再抽象。

3、类与实例(对象)的关系

组成类的对象均为此类的实例(Instance), 类是多个实例的综合抽象,实例是类的个体实物。

eg:

人类的定义:

class HUMANKIND

{ char *name;      //特征、属性、数据成员

double weight;    //特征、属性、数据成员

public:

void eat( );         //行为、操作、函数成员

void wear( );      //行为、操作、函数成员

void sleep( );     //行为、操作、函数成员

void travel( );     //行为、操作、函数成员

}; 

人类的实例:HUMANKIND XiaoMing;

4、头文件

C++为了兼容C,支持所有的C头文件,但为了符合C++标准,所有的C头文件都有一个C++版本,即去掉.h,并在名字前面加c。如 <cstring> 、 <cmath>、<cstdlib>,而<stdio.h>则是换成了<iostream>。

5、命名空间

假设有这样一种情况:一个班上有两个叫 Myon 的学生时,如何区分?

可用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等。

同样这样的情况也可能出现在 C++ 中:比如有两个相同的变量m,编译器就无法判断你使用的是哪个变量m,为了解决这个问题,我们就引入了“命名空间” ,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。

本质上,命名空间就是定义了一个范围。

定义方式:

namespace name(命名空间名)

{

//代码声明

}

使用方式:

(1)name::code;    //code可以是变量或函数

(2)using name::code;

(3)using namespace name;

C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。

来看个简单的例子

namespace A
{
	int a = 10;
}

namespace B
{
	int a = 20;
}

#include <iostream>

using namespace std;

int main()
{
	cout <<B::a << endl;
	cout <<A::a << endl;
}

这样我们就实现了区分不同库中的相同名称

namespace A   
{
	int a = 10;
}

namespace B
{
	bool a = true;  //布尔类型我们后面会讲
}

#include <iostream>

using namespace std;

int main()
{
	using namespace A;
	cout << a << endl;
	cout<<B::a << endl;
}

 将前面的最后一句代码改为

    cout << boolalpha <<B::a << endl;

就会打印出bool类型的true或false

 

6、输入输出

C语言的输入输出主要是scanf()、printf()函数,而C++ 则是使用类对象cin、cout进行输入输出。

cin>> :istream对象,标准输入流对象

cout<< :ostream对象,标准输出流对象

endl:换行,并清空输出缓冲区(end line 结束一行,并另起一行)

\n照样可以在cout中使用

对于”>>” ,如果需要连续输入多个数据,可以有两种方法:

(1)每行只输入1个数据,以换行符结束(即输完一个数据敲一次回车)。

我们还是先来看一个简单的例子

#include <iostream>
using namespace std;
int main()
{
	int a, b;  //定义了两个整数
	cin >> a >> b;  //输入两个数
	cout << a <<endl<< b;  //输出我们输入的这两个数(中间<<endl是换行)
}

 

 如果将<<endl去掉,输出的结果就不会换行

 (2)一行输入多个数据,数据间用空格符隔开,以换行符结束一行数据的输入。

#include <iostream>
using namespace std;
int main()
{   
	char buf[32];
	int a;
	cin >> buf >> a ;
	cout << buf << a ;
}

 

7、位运算

(1)按位与(&)

(2)按位或(|)

(3)按位异或(^)

(4)取反(~)

(5)左移(<<) 右移(>>)

8、基本数据类型

C++和C的基本数据类型几乎一样:

char     short     int     float     double     unsigned     signed 

但是C++中新增了一种数据类型:bool(布尔类型)

布尔类型对象可以被赋予文字值true或false,所对应的关系就是真与假的概念,即1,0

可以使用 boolalpha 打印出bool类型的true或false

看例子

bool compare(int a, int b)
{
	return a > b;
}

#include <iostream>
using namespace std;
int main()
{
	bool a = false;  //a为假,即a=0
	cout << sizeof(bool) << endl;  //输出bool类型的字节数
	cout << "a = " << a << endl;  //这种用双引号引起来的内容会被直接原样输出
	cout << "a = "<< boolalpha << a << endl;  //打印出bool类型的true或false
	cout << "compare = " << boolalpha << compare(7, 5) //判断a大于b的真假
	<< endl;
}

 由输出结果可见,布尔型变量只有一个字节。

9、结构体和三目运算符

在C语言中,定义结构体变量时struct关键字不能省略,但是在C++中是可以省略的。

 C         struct Test Myon;   //对       Test my;   //错

C++      struct Test Myon;    //对       Test my;   //也是对的,关键字struct可以省略

三目运算符:XX ? XX : XX

在C语言中,条件表达式只能做右值      

int c = a > b? a:b;   //C和C++中都可以  

而在C++中,条件表达式能做左值和右值

a > b? a:b = 520;   //只能是用在C++中,在C语言中这样写是错的

看例子

#include <iostream>
using namespace std;
struct Test
{
	int num;
};
int main()
{
	Test first;
	first.num = 101;
	int a = 2, b = 0;
	(a > b ? a : b) = first.num; //相当于*(a>b?&a:&b)=101
	cout << "a = " << a << endl;
}

C语言中,表达是不能作为左值,因为表达式返回的是值

但C++可以,因为其返回的是变量本身

即C++编译器对三目运算符做了增强工作,返回的是值的地址

相当于*(a>b?&a:&b)=101

10、for循环

C++中引入了基于范围的for循环,for循环后的括号由冒号“ :”分为 两部分,第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围。

一般用法:

#include <iostream>
using namespace std;
int main()
{
int arr[] = { 1,2,3,4,5,6 };
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	cout << arr[i] << "\t";  //\t表示空4格,相当于tab键
}

 新用法:

#include <iostream>
using namespace std;
int main()
{
int arr[] = { 1,2,3,4,5,6 };
for (int i : arr )
	cout << i << "\t"; 
}

特点:从数组的第一个元素开始,逐个赋值给迭代变量 ,不依赖于下标元素,通用。
 

11、const

C语言中的const并不是真正的常量,是只读变量,有自己的存储空间,只是表示const修饰的变量不能作为左值,常量的值可以通过指针被间接改变。

而C++中的const常量,存在符号表中,没有存储空间,当对常量取地址操作时,会另外开辟内存空间。

#include <iostream>
using namespace std;
int main()
{
	const int a = 10;
	int* p = (int*)&a;
	printf("a===>%d\n",a);
	*p = 11;
	printf("a===>%d\n", a);
}

通过指针修改了a的值,但输出却没有变 。

12、类型别名typedef

为一个已有的数据类型另外命名,称为typedef声明

 语法形式: typedef 已有类型名 新类型名表;

typedef int Area;

//声明Area为int的别名

typedef int (*DoubleIntFunction) (double);

//声明 DoubleIntFunction为“有一个double形参、返回值为int的函数的 指针”类型的别名

DoubleIntFunction funcPtr;

//声明一个具有该类型的名称为 funcPtr的函数指针,可以指向一个已经存在的函数代码的起始地址

#include <iostream>
using namespace std;
int transform(double a)
{
	return int(a);
}
int main()
{
typedef	int Area;
typedef int (*DoubleIntFunction) (double);//声明DoubleIntFunction为“有一个double形参、返回值为int的函数的指针”类型的别名
		DoubleIntFunction funcPtr; //声明一个具有该类型的名称为funcPtr的函数指针,可以指向一个已经存在的函数代码的起始地址
		funcPtr = transform;
	cout << (3.5) << endl;
Area a = 12;
	cout << "a=" << a << endl;
}

总的来说1~10还是比较好理解的吧,但是11和12我自己其实还没太想清楚,可能也有点不好理解,不过这也是刚开始学嘛,慢慢来,C++后面的内容会继续更新,这是我自学过程的记录,也希望对初学C++的朋友能有所帮助,C++程序设计这门课一定不能挂!

 

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

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

相关文章

SEEM:微软基于 CV 大模型新作,分割“瞬息全宇宙”

文 | 智商掉了一地交互式视觉分割新作&#xff0c;具有语义感知的新模型~自从 Meta 发布了“分割一切”的 SAM 之后&#xff0c;各种二创如雨后春笋般冒出&#xff0c;昨天微软的一篇论文又在推特上引起讨论&#xff0c;虽然最开始吸引小编的是它的名字——分割“瞬息全宇宙”&…

让技术造福残障人士,让开发助力无障碍

前言 随着互联网技术的快速发展&#xff0c;越来越多的领先技术运用到公益领域中来。运用科技来造福残障人士&#xff0c;比如前几年比较智能化的自动行走轮椅&#xff0c;盲人阅读器&#xff0c;以及聋哑人助听器等&#xff0c;都是通过科技来帮助残障人士方便生活的例子。作为…

OpenAI文档翻译——在不通的场景下如何更好的设计ChatGPT提示词

概述 OpenAI可以被广泛的应用于各种任务&#xff0c;他为各种模型提供使用简单而功能强大的API。你可以输入一些文本作为提示词&#xff0c;OpenAI则会生成对应的提示词补全&#xff0c;在使用过程中这就是会话形式以及能够记住上下文的体现。探索如何生成提示词的最好方法就是…

地图和规则来啦!全国大学生智能汽车竞赛百度创意组正式发布

‍‍「全国大学生智能汽车竞赛」是教育部倡导的大学生科技A类竞赛&#xff0c;是2022年全国普通高校大学生竞赛榜单内竞赛&#xff0c;中国高等教育学会将其列为含金量最高的大学生竞赛之一。在全国数百所高校的支持下&#xff0c;全国大学生智能汽车竞赛至今已成功举办了十七届…

2023AE软件、Adobe After Effects下载、安装教程

最后附下载地址 2023AE软件是一款由Adobe公司开发的视频编辑软件&#xff0c;也被称为Adobe After Effects。它在广告、电影、电视和网络视频等领域广泛应用&#xff0c;用于制作动态图形、特效、合成和其他视觉效果。该软件支持多种视频和音频文件格式&#xff0c;具有丰富的…

一文了解vue3的toRef和toRefs?

文章目录toRef / toRefs首先toRef的使用toRefs的使用&#xff1a;总结reactive定义对象类型<template><h3>姓名&#xff1a;{{ person.name }}</h3><h3>年龄&#xff1a;{{ person.age }}</h3><h3>薪资&#xff1a;{{ person.job.j1.salar…

微软发布了 97 个漏洞的补丁,包括主动勒索软件漏洞

今天是本月的第二个星期二&#xff0c;微软发布了另一组安全更新&#xff0c;修复了影响其软件的97 个漏洞&#xff0c;其中一个漏洞已被广泛用于勒索软件攻击。 97 个错误中有 7 个被评为严重&#xff0c;90 个被评为重要。有趣的是&#xff0c;其中 45 个缺陷是远程代码执行…

抽象简单web

由于js中for循环大致可以包含为 简单的遍历数组 遍历对象的属性 遍历字符串 多层循环 使用 break 和 continue 使用 for...of 遍历数组 使用 forEach 遍历数组 那么由于水平问题&#xff0c;将会一个个精通后才出一图流 简单的遍历数组 在进行实践前&#xff0c;需要简单了解…

Redis 7 事务、管道、发布订阅、主从、哨兵、集群

一、事务 1、简介 可以一次执行多个命令&#xff0c;本质是一组命令的集合。一个事务中的所有命令都会序列化&#xff0c; 按顺序地串行化执行而不会被其他命令插入&#xff0c;不许加塞一个队列中&#xff0c;一次性、顺序性、排他性的执行一系列命令 2、实战 常用命令 正…

(学习日记)2023.4.12

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

在线安装rancher2.4管理K8S集群并部署服务

条件&#xff1a; 1. 准备至少3台机器&#xff1b; 2. 三台机器需要有网络&#xff1b; 3. 安装rancher和K8S集群&#xff1b; # master节点 [rootlocalhost ~]# hostnamectl set-hostname k8s-master && bash [rootk8s-master ~]# hostname k8s-master [rootk8s-ma…

【面试】Mysql主键索引普通索引索引和唯一索引的区别是什么?

前言 在 MySQL 中, 索引是在存储引擎层实现的, 所以并没有统⼀的索引标准, 由于 InnoDB 存储引擎在 MySQL数据库中使⽤最为⼴泛, 下⾯以 InnoDB 为例来分析⼀下其中的索引模型.在 InnoDB 中, 表都是根据主键顺序以索引的形式存放的, InnoDB 使⽤了 B 树索引模型&#xff0c;所…

WAF攻防-信息收集识别被动探针代理池仿指纹白名单

文章目录信息收集常见检测&#xff1a;信息收集常见方法&#xff1a;信息收集-被动扫描-黑暗引擎&三方接口信息收集-工具扫描-Awvs&Xray&Goby内置信息收集常见检测&#xff1a; 1、脚本或工具速度流量快 2、脚本或工具的指纹被识别 3、脚本或工具的检测Payload 信…

013:Mapbox GL添加marker

第013个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中添加marker。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共70行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:https://xiaozhu…

重装系统需要做的事

1 设置小鹤双拼 winr 输入regedit&#xff0c;定位到「计算机\HKEY_CURRENT_USER\Software\Microsoft\InputMethod\Settings\CHS」 右键新建新建字符串值 数值名称&#xff1a;UserDefinedDoublePinyinScheme0 数值数据&#xff1a;小鹤双拼2*iuvdjhcwfgxmlnpbksqszxkrltvyovt …

css 使用blur,实现背景色高斯模糊,但不影响背景上的内容

实现效果 实现原理 1.filter&#xff1a;blur() 2.伪元素设置&#xff0c;不影响子元素显示 <!-- 库位使用率 --><div class"bkPart statusPart"><div class"co-title">库位使用率</div><div class"pickPos"><…

【RocketMQ】顺序消息实现原理

全局有序 在RocketMQ中&#xff0c;如果使消息全局有序&#xff0c;可以为Topic设置一个消息队列&#xff0c;使用一个生产者单线程发送数据&#xff0c;消费者端也使用单线程进行消费&#xff0c;从而保证消息的全局有序&#xff0c;但是这种方式效率低&#xff0c;一般不使用…

CDH6.3.2大数据集群生产环境安装(九)之部署flink1.13.2客户端

添加flink用户(可选,这里是因为公司需要这个参数所以才添加;所有节点都添加上,省事) 29.1. 添加 useradd flink部署flink客户端 选择一个集群节点作为客户端部署节点,这里选择zcpt-prd-bigdata-worker-01节点 30.1. 上传资源 flink-1.13.2-bin-scala_2.12.tgz 30.2. 解压…

Docker容器的官方镜像仓库

一、 官方镜像仓库介绍 镜像仓库分类 公有仓库 私有仓库 官方镜像仓库属于公有仓库 网址: hub.docker.com 网站名称:dockerhub 注册邮箱 创建仓库 创建自己的仓库 登录仓库 web界面登录 linux命令行登录 直接docker login 输入用户名和密码 这个自己创建的存储库一…

PID控制算法基础知识

PID控制算法基础知识 本文为PID控制算法的基础介绍 文章目录PID控制算法基础知识一、算法概述二、控制器的P、I、D项总结一、算法概述 PID是一个闭环控制算法。要实现PID算法&#xff0c;必须在硬件上具有闭环控制&#xff0c;就是需要有反馈。例如控制一个电机的转速&#xf…