C++入门基础知识之什么是C++?

1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。

二、C++教程的相关基本语法

对象-对象具有状态的行为。对象是类的实例。

类-类可以定义为对象行为、状态的模版。

方法-从基本上讲,一个方法表示一种行为,一个类可以包含多种方法。

变量

1、C++的注释

2、C++的关键字

3、C++标识符

标识符是用来标识变量、函数、类、模块,或任何其他用户自定义项目的名称。一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。

标识符内不允许出现标点字符,比如 @、& 和 %。C++ 是区分大小写的编程语言。

三、C++教程之C++数据类型

1、第一个C++程序

2、C++基本数据类型

七种基本的C++数据类型:bool、char、int、float、double、void、wchar_t

类型修饰符:signed、unsigned、short、long

注:一些基本类型可以使用一个或多个类型修饰符进行修饰,比如:signed short int简写为short、signed long int 简写为long。

3、C++数据类型在不同系统中所占空间大小

这个与机器、操作系统、编译器有关。比如同样是在32bits的操作系统系,VC++的编译器下int类型为占4个字节;而tuborC下则是2个字节。

原因:

c/c++规定int字长和机器字长相同

操作系统字长和机器字长未必一致

编译器根据操作系统字长来定义int字长

4、typedef声明

5、C++枚举类型

C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合;枚举元素是一个整型,枚举型可以隐式的转换为int型,int型不能隐式的转换为枚举型。

如果枚举没有初始化, 即省掉"=整型常数"时, 则从第一个标识符开始;

默认情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,以此类推。但是,您也可以给名称赋予一个特殊的值,只需要添加一个初始值即可。

例如:

6 、C++的常量及符号

(1)C++整型常量

整型常量可以分为有符号整型常量和无符号整型常量

八进制:以0开头,即以0作为八进制数的前缀,每位取值范围是0~7,八进制数通常是无符号数。

例如:016、0101、0128都是合法的八进制数

十六进制:以0x或者0X开头,其数码取值范围0 ~ 9,以及A ~ F或者a ~ f

例如:0X2A1、0XC5、0XFFFF都是合法的16进制数

(2)C++实型常量

小数表示法:由整数部分和小数部分组成,整数部分和小数部分每位取值范围是0~9,例如:0.0、3.25、0.00596、2.0

指数表示法:指数部分以符号"e"或者"E"开始,但必须是整数,并且符号"e"或"E"两边都必须有一个数,例如:1.2e20和-3.4e-2

(3)C++字符常量

字符常量是单引号括起来的字符,例如:'a'和'?'都是合法字符常量。字符'a'的ASCII码值是97,字符'A'的ASCII码值是41,字符'?'的ASCII码值是63

转义字符是特殊的字符常量,使用时以字符串’'代表开始转义,和后面不同的字符表示转义的字符。转义字符表如下所示:

(4)C++字符串常量

是由一对双引号括起来的零个或多个字符序列,例如:“welcome to our school”、“hello world”。""可以表示一个空字符串。

字符常量’A’和字符串常量"A"是不同的,字符串常量"A"是由'A'和'\0'两个字符组成的,字符串长度是2,字符串常量'A'只是一个字符,没有长度。

(5)C++其他常量

布尔常量:布尔常量只有两个,一个是true,表示真;另一个是false,表示假。

枚举常量:枚举型数据中定义的成员也是常量,这将在后文介绍。

宏定义常量:通过#define宏定义的一些值也是常量。例如:define PI3.1415。其中PI就是常量。

7、C++变量

变量其实只不过是程序可操作的存储区的名称。C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。

(1)标识符:是用来对C++程序中的常量、变量、语句标号以及用户自定义函数的名称进行标识的符号。

标识符命名规则:

有字母、数字及下划线组成,且不能以数字开头。
大写和小写字母代表不同意义。
不能与关键字同名
尽量“见名知义”,应该受一定规则的约束。
不合法的标识符:6A、ABC*、case(保留字)

c++保留关键字,如图所示:

(2)变量与变量说明:变量使用前一定要定义或说明,变量声明的一般形式如下:[修饰符] 类型 变量名标识符;

类型是变量类型的说明符,说明变量的数据类型。修改师傅是任选的,可以没有。

(3)整型变量:整型变量可以分为短整型、整型和长整型,变量类型说明符分别是short、int、long。根据是否有符号还可分为以下6种。

整型 [signed] int
无符号整型 unsigned [int]
有符号短整型 [signed] short [int]
无符号短整型 unsigned short [int]
有符号长整型 [signed] long [int]
无符号长整型 unsigned long [int]


(4)实型变量:又称为浮点型变量,变量可分为单精度(float)、双精度(double)和长双精度(long double)三种。

(5)变量赋值:变量值是动态改变的,每次改变都需要进行赋值运算。变量赋值的形式如下:变量名标识符 = 表达式,例如:

(6)变量赋初值:可以在声明变量的时候就把数据赋给变量,这个过程叫变量赋初值,赋初值的情况有以下几种:

int x=5;:表示定义x为有符号的基本整型变量,赋初值为5
int x,y,z=6;:表示定义x、y、z为有符号的基本整型变量,z赋初值为6
int x=3,y=3,z=3;:表示定义x、y、z为有符号的基本整型变量,且赋予的初值均为3

(7)字符变量:

一个字符类型,即可以字符形式输出,也可以整数类型输出:

允许对字符数据进行算术运算,此时就是对它们的ASCII码值进行算术运算:

(8)变量的作用域

局部变量:在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用。

全局变量:在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。

局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。

当局部变量被定义时,系统不会对其初始化;定义全局变量时,系统会自动初始化值:int float double 0,char ’\0‘,指针 NULL

8、C++自定义数据类型

(1)结构体

结构体可以包含不同数据类型的结构。

定义结构体的一般形式

结构体变量名的定义和初始化:

//定义结构体同时声明结构体变量名 struct 结构体类型名 { 成员类型1 成员名1; 成员类型2 成员名2; ... ... 成员类型n 成员名n; }变量名1,变量名2,...变量名n; //先定义结构体 [struct] 结构体类型名 变量名; //直接定义 struct  { 成员类型1 成员名1; 成员类型2 成员名2; ... ... 成员类型n 成员名n; }变量名1,变量名2,...变量名n; struct  person { int year; int age; string name; }p1 = {2019,24,"heiren"}, p1 = { 2020,24,"heiren" }; struct  person { int year; int age; string name; }; struct person p1 = { 2019,24,"heiren" }, p1 = { 2020,24,"heiren" }; struct  { int year; int age; string name; }p1 = {2019,24,"heiren"}, p1 = { 2020,24,"heiren" };

结构体变量的使用:

具有相同类型的结构体变量可以进行赋值运算,但是不能输入输出
对结构体变量的成员引用:结构体变量名.成员名
指向结构体的指针变量引用格式:指针变量名->成员名;
结构体数组的定义,初始化和使用与结构体变量、基本类型数组相似
struct person { int year; int age; string name; }p[2] ={ {2019,24,"heiren"}, { 2020,24,"heiren" }};//可以不指定数组元素个数 p[1].age; 

结构体作为函数传递有三种:值传递,引用传递,指针传递

结构体大小和字节对齐

现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐.

为什么需要字节对齐?各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些平台每次读都是从偶地址开始,如果一个int型(假设为32位系统)如果存放在偶地址开始的地方,那么一个读周期就可以读出这32bit,而如果存放在奇地址开始的地方,就需要2个读周期,并对两次读出的结果的高低字节进行拼凑才能得到该32bit数据。

三个个概念:

自身对齐值:数据类型本身的对齐值,结构体或类的的自身对齐值是其成员中最大的那个值,例如char类型的自身对齐值是1,short类型是2;

指定对齐值:编译器或程序员指定的对齐值,32位单片机的指定对齐值默认是4;

有效对齐值:自身对齐值和指定对齐值中较小的那个。

字节对齐的三个准则

结构体变量的首地址能够被其有效对齐值的大小所整除

结构体的总大小为结构体有效对齐值的整数倍。

结构体每个成员相对于结构体首地址的偏移量都是有效对齐值的整数倍。

可以通过#pragma pack(n)来设定变量以n字节对齐方式

(2)公用体(union)

几个不同的变量共享同一个地址开始的内存空间。

成员类型可以是基本数据类型,也可以是构造数据类型。

公用体变量初始化时,只能对第一个成员赋值。

公用体变量所占的内存长度等于最长的成员长度。

公用体变量在一个时刻只能一个成员发挥作用,赋值时,成员之间会互相覆盖,最后一次被赋值的成员起作用。

定义:

union 共同体类型名 { 成员类型1 成员名1; 成员类型2 成员名2; ... ... 成员类型n 成员名n; };

初始化

union data{ int i; float f; char c; }x = {123};union data{ float f; int i; char c; }; data x = {12.3};union { char c; int i; float f; }x = {’y‘};

引用

共同体变量名.成员名;union data{ int i; float f; char c; }x = {12};int main(){ cout << x.i << " " << x.f << " " << x.c << endl;//12 1.68156e-44 x.c = 'c'; cout << x.i <<" "<< x.f << " " << x.c << endl;//99 1.38729e-43 c return 0; }

9、C++数据输入与输出

(1)控制台屏幕

(2)操作控制

在头文件iomanip.h中定义了一些控制流输出格式的函数,默认情况下整型数按十进制形式输出,也可以通过hex将其设置为十六进制输出。流操作的控制具体函数如下

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值