目录
前言
1.c++简介
2.c++的基本程序(引入)
3.c++基础知识
1.c++基本语法
2. c++的数据类型
基本的数据类型
类型转换
静态转换(Static Cast):
动态转换(Dynamic Cast):
常量转换(Const Cast):
重新解释转换(Reinterpret Cast):
3.c++变量类型
类型分类
变量定义
变量作用范围:
4.c++常量
分类:
整数常量:
浮点常量:
布尔常量:
字符常量:
字符串常量:
定义常量:
define定义常量:
const关键字定义:
补充的问题:
结语:
本篇文章介绍c++相关知识,在有c语言基础上学习c++.
c++是在c的基础上增加了一些功能的稍微高级的语言,应用非常广泛,甚至另一门高级语言java也是由c++编写的,它完全可以实现面向对象程序设计,最早是本贾尼·斯特劳斯特卢(Bjarne Stroustrup)编写的,刚开始被认为是带类的c语言,后来不断改进,最新的一版目前是2020年的。
C++与C语言完全兼容,C语言的绝大部分内容可以直接用于C++的程序设计,用C语言编写的程序可以不加修改地用于C++。因此如果学习过c语言再学习c++会发现它有很多东西都学过了。
简单来说:c++=c语言+具有高级功能的语言
讲解c++的知识之前我们先看一段代码:
#include
using namespace std;
int main() {
cout << "hello!"<
这是一个基础且典型的c++代码,运行结果是输出hello!,那么我们观察这个和c语言输出相同结果的代码有什么区别呢?有什么新的东西没见过的呢?
1.头文件使用
而不是 ? 2.有一行using namespace std ?
3.使用cout<<输出?
4.后面还有一个endl?
现在让我们来先简单的了解一下:
1.头文件变化为
2.这个是一个c++里面的全新的知识——命名空间,因为
3.输出用cout<<就像c语言中输出用printf一样,<<是一个操作符,用于向屏幕输出内容
4.endl是指在末尾插入一个换行符,相当于"\n"
C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互
- 对象:对象具有状态和行为,比如一棵树的状态:颜色,高度...
- 类: 类可以定义为描述对象行为或者是状态
- 方法 :一个方法表示一种行为,一个类可以包含多个方法.
- 即时变量 :每个对象都有其独特的即时变量,对象的状态是由这些即时变量的值创建的。
c++的编译和执行:
通常来说,c语言可以使用的编译器也可以提供给c++使用,dev c++/vs等
c++的标识符定义和c语言定义的标准相同,都是由数字、下划线、字母组成,而且数字不可以放在第一位
c++的关键字就和c语言的不太一样了,它增加了许多不同的例如:asm等,下图为基本的关键字(不能作为常量名、变量名或其他标识符名称)
和c语言基本相同,仍然有基本类型、枚举类型、typedef声明、不过c++的类型转化更为复杂了。
补:宽字符型是wchar_t
基本的数据类型前可以添加signed、unsigned,其中默认情况下int、short、long都是带符号的,即 signed
数据类型的大小:
32字节下的:
64字节:
C++ 中有四种类型转换:静态转换、动态转换、常量转换和重新解释转换。
静态转换是将一种数据类型的值强制转换为另一种数据类型的值的转换方式,通常用于比较类型相似的对象之间的转换,例如将 int 转换为 float。
它不进行任何运行时类型检查,可能会导致运行时发生错误
由基类的指针或引用转化为派生类的指针或引用,动态转换在运行时进行类型检查,如果不能进行转换则返回空指针或引发异常。
这里仅作了解,有关基类指针和派生类指针这里还没讲解到,以后会讲。
从const类型转到非const类型,并不能改变基本的数据类型
有关const相关知识可以看c语言中的const-CSDN博客
把一个数据类型转化为另一个数据类型,通常用于在不同的数据类型之间进行转换。
重新解释转换不进行任何类型检查,因此可能会导致未定义的行为。
int 、short 、long 、long long
float、double 、long double
char
、wchar_t
、
char16_t
:用于表示16位Unicode字符,占用2个字节。
char32_t
:用于表示32位Unicode字符,占用4个字节。
bool
:用于表示布尔值,只能取true
或false
。
enum
:用于定义一组命名的整数常量。
通常来说都是使用
变量类型+变量名=赋值;
例如:
变量分为全局变量、局部变量等,导致他们的作用域不同
作用域分为:
1.全局作用域
在所有函数和代码块之外声明的变量具有全局作用域,它们可以被程序中的任何函数访问。全局变量在程序开始时被创建,在程序结束时被销毁。
#include
using namespace std; int a = 20;// 全局变量声明 int main () { cout << a;//输出20 return 0; } 2.块作用域
在代码块内部声明的变量具有块作用域,它们只能在代码块内部访问。块作用域变量在代码块每次被执行时被创建,在代码块执行完后被销毁。
#include
using namespace std; int main() { int a = 10; { int a = 20; // 块作用域变量 cout << a < 3.类作用域
在类内部声明的变量具有类作用域,它们可以被类的所有成员函数访问。类作用域变量的生命周期与类的生命周期相同。
#include
class MyClass {//定义一个类 public: static int class; // 类作用域变量 }; int class = 10;//赋值 int main() { std::cout << class << std::endl;//输出10 return 0; } 4.局部作用域
在函数内部声明的变量具有局部作用域,它们只能在函数内部访问。局部变量在函数每次被调用时被创建,在函数执行完后被销毁。
可以覆盖全局变量的值:
#include
using namespace std; int a = 20;// 全局变量声明 int main () { // 局部变量声明 int a = 10;//可以覆盖住全局变量 cout << a;//输出10 return 0; }
十进制/八进制/十六进制
举个例子:
有时候整数常量可以加上后缀:U/L
U代表无符号型常量,L代表长整数
后缀可以是大写,也可以是小写,U 和 L 的顺序任意,但是不可以重复使用eg.10uu
举几个整数常量的正确栗子:
30 // 十进制
0213 // 八进制
0x4b // 十六进制
30u // 无符号整数
30l // 长整数
30ul // 无符号长整数
浮点常量由整数部分、小数点、小数部分和指数部分组成
表示形式有小数和指数形式:3.14(小数类型)、指数类型(e 或 E 被称为阶码标志,e 或 E 后面的有符号整数被称为阶码)
⭐⭐⭐指数类型需要注意的点是:e前后的实数和整数不能省略、不能有空格、有阶码的小数点前面只能有一位非0的数字、阶码后面只能是整数,不能是整数表达式
true表示真
flase表示假
字符常量可以是一个字符'a'或者是一个转义字符或者是通用字符
转义字符举例:\n、 \t 、\a等
通用字符:\u+四个十六进制数字或者\U+八个十六进制数字等
字符串字面值或常量是括在双引号 "" 中的。一个字符串当然也包含类似于字符常量的字符:普通的字符、转义序列和通用的字符。
例如:
const int i=10;
那么i就相当于一个值为10的常量
⭐⭐定义常量时注意尽量大写,好区分变量和常量
⭐iostream和iostream.h的区别?
iostream是一个标准输入输出流,当代码中引入
时,输出需要引用std,就是加上一行using namespace std iostream.h输出可直接引用cout<
继承C语言的标准库文件,未引入名字空间定义,所以可直接使用
⭐std到底是什么意思using namespace std又是干什么用的?
- “std::” 是 C++ 中的命名空间,用于标准库的函数和类的定义。在 C++ 中,为了防止函数和类的名字冲突,可以将它们放在命名空间中,以区别于其他命名空间或全局空间。在使用标准库的函数或类时,可以通过加上"std::"前缀来指定是哪个命名空间的。为了简化操作,可以使用 “using namespace std;” 语句,这样就不需要加"std::"前缀了。命名空间的作用是能够区分不同的类和函数,避免名字冲突。
- std::前缀往往加在cout前面(当没有使用using namespace std;时)
- 也可以使用using std::cout;来代替using namespace std;
⭐命名空间?
命名空间是用来组织和重用代码的。如同名字一样的意思,NameSpace(名字空间),之所以出来这样一个东西,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象,对于库来说,这个问题尤其严重,如果两个人写的库文件中出现同名的变量或函数(不可避免),使用起来就有问题了。为了解决这个问题,引入了名字空间这个概念,通过使用 namespace xxx;你所使用的库函数或变量就是在该名字空间中定义的,这样一来就不会引起不必要的冲突了。
感谢观看,欢迎点赞收藏
下期传送门:c++入门学习(二)-CSDN博客