C++与C的区别
b站视频:C语言与C++到底有什么区别
1.最简单的C++程序
#include <iostream> //头文件
#include <cstdio> //等效#include <stdio.h>
using namespace std; //命名空间
int main(){ //入口
return 0;
}
C++头文件:
- 直接类名的方式直接包含
- C++包含C语言头文件,依旧可以采用C语言,当包含C语言标准库中的头文件时,可以采用C头文件名方式包含
- 包含自己写的头文件依旧时采用“xx.h”.
C++入口函数
- C++只支持int返回值入口函数,没有void,有没有参数返回都行。
C++命名空间
- 命名空间的语法
- 如何访问命名空间中值
- 如何省略掉空间名
- 命名空间的嵌套
#include<iostream>
#include<cstdio>
using namespace std;
/*
C++命名空间
1.命名空间的语法
namespace 空间名
{
变量;
函数;
自定类型;
}
2.如何访问命名空间中值
空间名;:成员;
3.如何省略掉空间名
using namespace 空间名;
4.命名空间的嵌套
剥洋葱
*/
namespace moying
{
int age;
void print(){
printf("moying::print\n");
}
}
namespace A{
int age;
namespace B{
void print(){
printf("A::B::print\n");
}
}
}
int main(){
moying::age = 11;
moying::print();
using namespace moying;
printf("%d\n",age);
cout << "ILoveyou" << endl;
// 如果没有using namespace std
//std::cout << "iloveyou" << std::endl;
A::B::print();
return 0;
}
2. C++基本输入和输出
C++输出(cout << ;)
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
//No.1输出
printf("可以");
cout << "真行";
cout << 1;
// 1.2 C++依旧支持C语言的转义字符
cout << "\n";
//1.3 如何输出多个数据
printf("%d\t%s%lf\n",1,"pat",1.1);
cout << 1 << "\t" << "pat" << "\t" << 1.1 << "\n";
//1.4 如何输出变量
int iNum = 1;
char str[] = "pat";
double dNum = 1.111;
cout << iNum << "\t" << str << "\t" << dNum << "\t";
//1.5 换行 endl
cout << "\n";
cout << endl;
return 0;
}
C++输入 (cin >>;)
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int iNum = 1;
char str[] = "哈哈";
double dNum = 1.111;
//No.2输入
//2.1 输入单个字符
cin >> iNum;
cout << iNum << endl;
//2.2 输入多个数据
cin >> iNum >> str >> dNum;
cout << iNum << "\t" << str << "\t" << dNum << "\t";
int num = 111;
std::cout << " ily" << std::endl; //using namespace 在局部时
cout << num << endl; //就近原则
cout << ::num << endl; //标识当前num是全局区域的
return 0;
}
3.C++的一些小细节
#include <cstdio>
#inclued <iostream>
using namespace std;
int main(){
cout << 5 % 2 << endl;
cout << -5 % 2 << endl;
cout << 5 % -2 << endl;//正负取决于前面的数的正负
return 0;
}
//强制转换
#include <iostream>
using namespace std;
int main(){
//显性类型转换
int a = 5;
float b = float(a);
printf("%f\n",b);//整型转浮点
float c = 5.23;
int d = (int)c;
printf("%d\n",d);//浮点转整型,向下取整
int t = 47;
char y = (char)t;
cout << y << endl;//整型转字符
char r = 'a';
int e = (int)r;
cout << e << endl;//字符转整型
char w = 'A';
cout << (char)(c + 33) << endl;
//隐性类型转换
a = 6;
b = 1.3;
cout << a * b << endl;//把精度低的类型变成精度高的
return 0;
}
4.C++数据类型
bool | false/true | 1byte |
---|---|---|
char | ‘c’ ,‘a’ ,‘ ’ ‘, \n’; | 1byte |
int | -2147483648 ~ 2147483647 | 4byte |
float | 1.23, 2.5, 1.234e2, 6—7位有效数字 | 4byte |
double | 15-16位有效数字 | 8byte |
int | -2147483648 ~ 2147483647 | 4byte |
long long | -2^63 ~ 2^63-1 | 8byte |
long double | 18-19位有效数字 | 16byte |
#include<iostream>
using namespace std;
//1.4 函数返回值:具有判断含义的函数
bool size(int cursize){
return cursize == 0;
}
void print(int a){ //2.1 所有的传参 形参 = 实参 都是赋值
a = 123;
}
void print2(int& a){ //2.1 int& a = iNum;
a = 123;
}
int returnNum(){ //2.2 错的
return 1;
}
int g_num = 0; //2.2 对的
int& reuturnG_num(){ //int& 返回值=g_num;
return g_num;
}
int main (){
//No.1 bool类型
//1.1 表示的含义:真和假
bool bNum = false;
//1.2 它打印的值:0或者1
cout << bNum <<endl;
//1.3 计算机中非零值,非空值都表示成立
bNum = 1.1;
cout << bNum <<endl;
//1.4 bool 内存占用:占用1个字节
cout << sizeof(bNum) <<endl;
//一般bool类型用在函数返回值或者是充当开始开关,标记使用
//---------------------------------------------------//
//---------------------------------------------------//
//No.2 引用类型(C++很重要的类型)
//一般用在函数返回值或者传参
//2.1 引用的类型的含义:起别名
int girl = 1001;
int& haha = girl;
haha = 9999;
cout << girl << endl;
int iNum = 111;
print(iNum); //a = iNum
cout << iNum << endl;
//2.2 充当返回值:需要注意的问题:不能返回局部变量的值
// returnNum()++; 错的,因为他只是返回一个值不是变量
reuturnG_num() = 123123;
cout << g_num << endl;
//2.2 特殊的
int&& c_Num = 123; //常量的别名,但是可以修改,移动语义
c_Num++;
const int cNum = 1;
const int& num = 123;
//num++; 不能改变
//---------------------------------------------------//
//---------------------------------------------------//
return 0;
}
5.C++函数思想
C++函数内联思想
#include<iostream>
using namespace std;
//函数内联:编译完后,当前函数的存在形式是二进制,牺牲空间的方式提高运行效率
//知道即可,通常内联函数的特点:短小精悍,新的关键字修饰寒湖是:inline
//事先知道一个事情:通常再结构体中或者类中实现的函数默认位内联函数
inline int Max(int a,int b){
return a > b ? a : b;
}
int main (){
return 0;
}
C++函数重载思想
#include<iostream>
using namespace std;
//允许同名不同参的函数存在
//不同参:1.类型不同
void print(int a){
cout << a << endl;
}
void print(double a){
cout << a << endl;
}
//2.数目不同
void print(int a,int b){
cout << a + b << endl;
}
//3. 顺序不同(建立在不同类型的基础之上)
// void print(int b ,int a)与2.一样 形参顺序变没用
void print(char a,int b){
cout << a + b << endl;
}
void print(int a,char b){
cout << a + b << endl;
}
int main (){
print(1+1);
print(1/4);
print(1,1);
print('A',1);
print(1,'A');
return 0;
}
C++函数缺省思想
#include<iostream>
using namespace std;
//C++函数缺省 给形参初始化
//初始化的顺序 必须从右往左缺省 ,不能有空的
void print(int a = 1,int b = 2,int c = 3,int d = 6){
cout << a + b + c + d << endl;
}
int main (){
print(); //没有传参使用的是默认参数
print(10); //从左往右初始化
print(1,3);
print(1,3,5);
print(1,3,5,7);
return 0;
}
6.C++动态内存申请
#include<iostream>
#include<malloc.h>
#include<cassert>
using namespace std;
int main (){
//C++动态内存申请 new delete
int* cp = (int*)malloc(sizeof(int));
int* cpp = new int;
//------------------------------------------
int* cArray = (int*)malloc(sizeof(int) *3);
int* cppArray = new int [3];
//------------------------------------------
free(cp);
cp = nullptr;
delete cpp;
cpp = nullptr;
//------------------------------------------
free(cArray);
cArray = nullptr;
delete [] cppArray;
cppArray = nullptr;
int* pC = (int*)calloc(sizeof(int),3);
assert(pC);
cout << pC[0] << pC[1] << pC[2] << endl;
//------------------------------------------
//C++也可以申请内存并初始化
//单个数据用()方式初始化
int* pCpp = new int(323);
cout << pCpp[0] << endl;
//多个数据用{}方式初始化
int* arrayCpp = new int[3]{1,2,3};
cout << arrayCpp[0] << arrayCpp[1] << arrayCpp[2] << endl;
free(pC);
pC = nullptr;
delete pCpp;
pCpp = nullptr;
delete[] arrayCpp;
arrayCpp = nullptr;
return 0;
}