2020.10.26 第01课 C++与C的区别
C++与C的区别
一、基本区别
1.源文件改为.cpp
2.头文件的改变
2.1 标准的C++头文件: #include
2.2 包含C语言的头文件
2.2.1 常规包含
2.2.2 去掉.h 包含
二、命名空间引入
1.如何创建
namespace 空间名
{
int age;
}
2.学会调用
2.1 常规调用:空间名::成员 :空间名::age 作用域分辨符
2.2 using namespace 空间名; 用来省略前缀调用
3.嵌套:学会使用
#include <iostream>
//#include <stdio.h>
#include <cstdio>
#include <ctime>
using namespace std; //命名空间
namespace MM
{
int age;
int num;
void print()
{
printf("MM空间中的函数");
}
}
namespace boy
{
int age;
int num;
}
//嵌套
namespace A
{
int a;
namespace B
{
int b;
}
}
int main()
{
printf("C语言的打印!\n");
//1.最常规的用法 作用域分辨符
MM::age = 1001;
MM::num = 9999;
MM::print();
//2.省略前缀
using namespace boy;
age = 1001;
num = 999;
boy::age = 199;
//3.空间嵌套的访问
A::a = 100;
A::B::b = 1001;
using namespace A::B;
b = 1004;
printf("%d\n", b);
return 0;
}
三、C++的输入输出
主要学会使用,是个什么东西先不用
1.基本输出 cout 和<<
cout<<1;
int num=1;
float fNum=1.1f;
char *str="ILoveyou";
cout<<num<<"\n";
cout<<fNum<<"\n";
cout<<str<<"\n";
cout<<num<<fNum<<str<<endl;
//"\n"可以替换为endl
cout<<str<<endl;
2.基本输入 cin >>
int num;
cin>>num;
float fNum;
cin>>num>>fNum;
char str[5];
cin>>str;
四、数据类型上的区别
1.引入新的类型:bool类型 布尔 c99以上的库
1.1 false 和 true 真和假意思
1.2 非零表示成立 ,零或者空表示不成立 ,bool类型可以赋值任何东西
1.3 bool类型变量打印出来只有0和1
1.4 占用1个字节
2.引入引用类型:及其重要的类型
2.1 理解为起别名
类型& 别名=变量;
2.2 常规使用1: 当作函数参数防止拷贝本的存在
2.2 常规使用2: 当作函数返回值 ,相当于返回一个变量
2.3 特殊的引用 : 常引用
#include <iostream>
using namespace std;
void modify(int* a)
{
*a = 1001;
}
void modifyCPP(int& a) //int& a=num;
{
a = 1003;
}
int g_num = 1001;
void modifyPoint(int* &p) //指针的引用 int* &p=pp;
{
p = &g_num;
}
int returnNum()
{
return g_num; //返回变量就是返回一个值
}
int& returnG_num()
{
//不能返回局部变量引用
return g_num;
}
//可以传常量,也可以传入变量
void printConst(const int& num)
{
//const 当修饰形参,当前函数中不能修改形参
cout << num << endl;
}
//只能传常量
void printConstTrue(int&& num)
{
cout << num << endl;
}
int main()
{
//1.第一个数据类型
//bool类型占用一个字节
bool flag = true;
cout << flag << "\tsize:" << sizeof(flag) << endl;
flag = 1000;
//非零表示成立 成立是真 ,真就是1
cout << flag << endl;
//可以输出false和true
cout << boolalpha << flag << endl;
//2.引用类型 为变量起别名
int 小芳 = 100;
int& 亲爱的 = 小芳;
亲爱的 = 999;
cout << 小芳 << endl;
int num = 1998;
//C语言
modify(&num);
cout << num << endl;
//C++
modifyCPP(num); //传参就是一个赋值操作
cout << num << endl;
int* pp = #
modifyPoint(pp);
cout << *pp << endl;
//returnNum() = 1;
//g_num=9999;
returnG_num() = 9999;
cout << g_num << endl;
printConst(1);
printConst(num);
printConstTrue(1001);
return 0;
}
五、函数上的区别
1.引入内联的思想: 牺牲空间 提高效率 编译后是二进制的形式
短小精悍
inline修饰的函数
在结构体中和类中实现的函数默认为内联的函数
2.函数重载: 允许相同函数名不同参数的函数存在
putimage();
loadimage();
2.1 参数数目不同
2.2 参数类型不同
2.3 参数顺序不同,建立在存在不同类型
和返回值类型没有任何关系
3.函数缺省的思想: 就是给形参初始化
作用:为了实现函数的不同调用形参 ---->(构造不同的对象)
规则: 缺省必须从右边开始缺省 中间不能存在空挡
注意: 不要和重载产生冲突,多文件中,只需要在声明的时候缺省不需要在实现中缺省
#include <iostream>
using namespace std;
void modify(int* a)
{
*a = 1001;
}
void modifyCPP(int& a) //int& a=num;
{
a = 1003;
}
int g_num = 1001;
void modifyPoint(int* &p) //指针的引用 int* &p=pp;
{
p = &g_num;
}
int returnNum()
{
return g_num; //返回变量就是返回一个值
}
int& returnG_num()
{
//不能返回局部变量引用
return g_num;
}
//可以传常量,也可以传入变量
void printConst(const int& num)
{
//const 当修饰形参,当前函数中不能修改形参
cout << num << endl;
}
//只能传常量
void printConstTrue(int&& num)
{
cout << num << endl;
}
int main()
{
//1.第一个数据类型
//bool类型占用一个字节
bool flag = true;
cout << flag << "\tsize:" << sizeof(flag) << endl;
flag = 1000;
//非零表示成立 成立是真 ,真就是1
cout << flag << endl;
//可以输出false和true
cout << boolalpha << flag << endl;
//2.引用类型 为变量起别名
int 小芳 = 100;
int& 亲爱的 = 小芳;
亲爱的 = 999;
cout << 小芳 << endl;
int num = 1998;
//C语言
modify(&num);
cout << num << endl;
//C++
modifyCPP(num); //传参就是一个赋值操作
cout << num << endl;
int* pp = #
modifyPoint(pp);
cout << *pp << endl;
//returnNum() = 1;
//g_num=9999;
returnG_num() = 9999;
cout << g_num << endl;
printConst(1);
printConst(num);
printConstTrue(1001);
return 0;
}
六、动态内存申请
1.为单个变量申请内存
int *p=new int;
delete p;
2.申请为数组
int* array=new int[4];
delete [] array; //delete array;
3.在申请当中可以直接初始化
//()为单个变量初始化
int *p=new int(100); //*p=100;
int *array=new int[4]{1,2,3,4}; //array[0]=1;
//{}为多个变量初始化
4.内存池的概念
C++允许在已申请的内存上在分配内存
char *pMemory=new char[1024];
//让pMemory前16个字节存放4个整数
int *pInt=new(pMemory+0) int[4];
//存字符串:10个长度
char* pChar=new(pMemory+16)char[10]; //char* pChar=new(pInt+4) char[10];
#include<iostream>
using namespace std;
int main()
{
//C语言 :malloc ralloc calloc+free
//C++: new +delete
int* pInt = new int;
*pInt = 1001;
delete pInt;
pInt = NULL;
int* array = new int[4];
array[0] = 1;
delete[] array; //没有这种: delete[][] array;
array = NULL;
int* p = new int(4);
cout << *p << endl;
int* pArray = new int[3]{ 1,2,3 };
for (int i = 0; i < 3; i++)
{
cout << pArray[i] << endl;
}
delete[]pArray;
pArray = nullptr; //nullptr替换C语言中的NULL
int** array2D = nullptr;
array2D = new int* [3];
for (int i = 0; i < 3; i++)
{
array2D[i] = new int[3];
}
delete array2D;
array2D = nullptr;
char* pMemory = new char[1024];
//让pMemory前16个字节存放4个整数
int* ppInt = new(pMemory + 0) int[4];
//存字符串:10个长度
char* pChar = new(pMemory + 16)char[10]{"ILoveyou"};
printf("%s\n", pMemory+16); //I
delete [] pMemory;
pMemory = nullptr;
return 0;
}