C+±基本语法
一、语言的基本特性
-
C++语言存在多个版本,C11(第三个语言基本特性) 、C17(第五个语言基本特性) 、C20 等 ,其中大部分标准的形式是C11,后续的版本在此基础之上增加了一些新特性
-
C++语言的特性:封装、继承、多态、抽象
-
标准库的重要组成部分:核心语言库、C++标准库、标准模板库(STL)
##二、 语言基本数据类型
整型 : int long short
字符型: char
浮点型: float double
布尔型: bool
无类型: void
宽字符型: wchar_t (该类型的实际转换形式) typedef short int wchar_t;
数据类型修饰符:signed(有符号) unsigned(无符号) long (长精度)
数据类型占用字节
类型转换(安全转换和非安全转换)
-
静态转换-用于将一种数据类型的值强制转换为数据类型的值-静态转换通常用于比较类型相似对象之间的转换。
int i=0; float f=static_cast<float>(i); //static_cast 表示用于安全转换 //其余转换同其他语言一样
-
动态转换-用于将一个基类活引用转化为派生类指针和引用。动态转换在运行时进行类型检查,不能进行转换的时候,通常会引发和产生空指针异常
class Base{}; class Derived : public Base {}; Base* base_ptr =new Derived; //Java中称为向上转换 C++中体现的是基类指针转换为派生类指针 Derived* ptr_derived = dynamic_cast<Derived(ptr_base); // 将基类指针转换为派生类指针
-
常量转换
常量转换用于将const类型的对象转换为非const类型的对象
常量转换只能用于转换掉const属性,不能改变对象的类型
cosnt int i=99; int& temp =const_cast<int&>(int); //常量转换,将const int ---》 int
-
重新解释转换
重新解释转换将一个数据类型的值重新解释为另一个数据类型的值,通常用于在不同的数据类型之间进行转换。
重新解释转换不进行任何类型检查,可能会产生未定义的行为产生
int i=0; float f=reinterpret_cast<float&>(i);
非安全转换:
//非安全转换 类似这种可能存在损失精度的操作过程
//同时也存在 字符和无字符的存在
double temp =0.3;
int temp_int =temp;
变量作用域
- 局部作用域:在函数内部声明的变量具有局部作用域,它们只能在函数内部访问,局部变量在函数每次被调用时被创建,在函数执行完后被销毁。
- 全局作用域:在所有函数和代码块之外声明的变量具有全局作用域,它们可以被程序中的任何函数访问。全局变量在程序开始时被创建,在程序结束时被销毁。
- 块作用域:在代码块内部声明的变量具有块作用域,它们只能在代码块内部访问。块作用域变量在代码块每次被执行时被创建,在代码块执行完后被销毁。
- 类作用域:在类内部声明的变量具有类作用域,它们可以被类的所有成员函数访问。类作用域变量的生命周期与类的生命周期相同。
***特别注意:***在C++存在指针和引用的概念,Java中存在引用概念,C语言中存在指针的概念;
//指针
char str='999';
char * string =&str;
double * temp;
//引用
int test=199;
int& temp_int =test;
//两者之间的区别
引用:就是对于一个已经存在变量申请一个别名 类似于C语言中的 typedef test test_t;
指针:指针本身是一个对象,一般存放的是地址值,代表已经初始化的一块存储空间
指针和引用的区别:
- 不存在空引用,引用必须连接到一块合法的内存
- 一旦引用被初始化为一个对象,就不能被指向另一个对象。指针恰好相反
- 引用必须在创建时被初始化,指针可以在任何时候初始化。
二、剖析程序案例
#include <iostream> //输入和输出流
using namespace std //自定义命令空间,主要用于区分不同空间中的同名成员函数或者成员变量
int main()
{
int temp;
cin>> temp;
//std::cout std用于区分不同空间中的变量调用
cout<< "output this value" //>>读取键盘输出的数据
std::cout<< "Hello World !" //<<表示字符通过流的方式进行输出
std::cin >> temp
return 0;
}
三、字符串、数组和向量
标准库 String
- 定义和初始化string对象
#include <string>
//C++中的初始化形式存在两个概念,拷贝初始化(直接赋值)和直接初始化(new对象)
string str="肥肠教主"
string strD("肥肠教主")
string strD(10,"6") //代表10个初始化6字符串相加
//其余功能和作用与其他语言无异议
//特别的 返回的字符大小的类型
string::size_type count=strD.size();
//特别的关键字
decltype() //代表获取其中的传入变量名的数据类型
标准库vector
//标准库函数 -实际上等于Java中的集合
vector<T> contianer
//初始化形式
vector<int> vs;
vector<int> vs1(vs);
vector<int> vs2=vs;
//列表初始化
vector<string> v{"a","b","c"};
//其余的方法和其余语言几乎相同
……基本特性到此结束!!