如果有可以补充或者写错的,希望大家能指出来,蟹蟹~
目录
0.可以这么理解:
1.头文件及后缀名
C语言 | C++ |
---|---|
stdio.h | iostream |
math.h | cmath |
string.h | cstring |
stdlib.h | cstdlib |
… | … |
C语言: .c
C++: .cpp
2.命名空间
C++特有的
使用命名空间:using namespace
命名空间:std
作用域运算符 (::)
#include<iostream>
//第一种使用命名空间
using namespace std;
int main()
{
cout<<"Hello World!"<<endl;
return 0;
}
//第二种
int main()
{
std::cout<<"Hello World!"<<std::endl;
return 0;
}
ps:
1.cout在C++中用于输出,相当于printf。endl在C++中用于换行,相当于 \n 。
2.作用域运算符作用挺多的,这里先不介绍了。
3.基本数据类型
C++比C语言多一个数据类型:bool(布尔类型)
bool只有两个值!(用于区分逻辑的真假和数字1,0)
bool a;
a = ture; //相当于真 ‘1’
a = false; //相当于假 ‘0’
4.输入输出
C语言 | C++ | |
---|---|---|
输入 | scanf | cin |
输出 | printf | cout |
换行 | \n | endl |
#include<iostream>
using namespace std;
int main()
{
int n,m;
//输入n
scanf("%d", &n);
cin >> m;
//输出n
printf("%d\n", n);
cout << m << endl;
return 0;
}
ps:
1.在C++中依旧可以使用 scanf 和 printf ,并且scanf,printf 要比 cin,cout更快。(如果程序运行超时了,可以换成scanf,printf)
2.用scanf 和 cin 输入字符串时,与空格截至。如果要输入带有空格的字符串,可以用gets或者getline(cin,str); 或者 cin.getline(str); 。
string str1,str2; //一种可以不用定义长度的字符串类型
getline(cin,str1); //输入字符串
cin>>str2;
puts(str1); //输出
puts(str2);
输入:hello word!
hello word!
输出:hello word!
hello
5.返回值
在没指定返回值情况下:
C语言:默认返回 int 类型。
C++:默认返回 void 类型
6.参数列表
当调用函数的参数为空的时候:
C语言:实参可以有任意多个。
void add(){
}
add(1,2,3);
C++:实参个数只能为0。
void add(){
}
add();
7.动态内存分配
开辟内存 | 释放内存 | 方式 | |
---|---|---|---|
C语言 | malloc | free | 函数 |
C++ | new | delete | 运算符 |
#include<iostream>
using namespace std;
int main()
{
int *p;
p = new int; //使 p 指向 int 空间
delete p; //释放空间
return 0;
}
8.结构体
创建一个结构体
C语言 | C++ |
---|---|
struct Std zhou; | Std zhang; |
9.条件运算符
C语言:
#include<stdio.h>
int main()
{
int a=3,b=7;
printf("%d\n",a>b?a:b);
return 0;
}
输出:7
C++:
判断后的变量可以被赋值
#include<iostream>
using namespace std;
int main()
{
int a = 3,b = 7;
a> b ?a: b = 10; //判断的那个变量被赋值为10
cout << b << endl;
return 0;
}
输出:10
10.for循环中的 i 的定义
在C语言中,i 必须在for之前定义。
int i;
for(i=0;i<10;i++){
......
}
在C++ 中可以这么定义:
(在for循环中定义 i 可节省内存,当for循环结束,i 的所占内存也就被释放了)
for(int i;i<10;i++){
......
}
11.强制转换
在C语言中:
double a;
int b = 2, c = 5;
a = (double)b /c;
在C++ 中:
double a;
int b = 2, c = 5;
a = double b /c;
12.变量的引用
在这一部分,& 作为“引用声明符”。
简单来说,变量的引用就是给变量起一个别名
#include<iostream>
//第一种使用命名空间
using namespace std;
int main()
{
int a = 7;
int &b = a;
b = 14;
cout<< a <<endl;
return 0;
}
输出:14;
注意:
1.声明一个引用,并不会开辟空间,b 和 a 都代表同一变量单元。
2.声明引用时一定要初始化。
3.声明一个引用后,在这个函数执行期间,不可以再作为其他变量的别名。
4.不能建立void型和数组的引用。
作用:
1.传值方式调用
#include <iostream>
using namespace std;
void swap(int &a,int &b) //变量的引用 如果void swap(int a,int b)这样写,将不能实现交换
{ //将输出 7 14
int temp;
temp = a;
a = b;
b = temp;
}
int main()
{
int a = 7, b = 14;
swap(a, b);
cout << a <<" "<< b << endl;
return 0;
}
输出:14 7
2.引用方式调用
#include <iostream>
using namespace std;
void swap(int *a,int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int a = 7, b = 14;
swap(&a, &b);
cout << a <<" "<< b << endl;
return 0;
}
输出:14 7
13.内联函数
关键字:inline
作用:
1.减少函数调用成本。
2.空间换取时间。
例子:
#include<iostream>
using namespace std;
//内联函数
inline int Max(int a,int b,int c){
if(b>a) a=b;
if(c>a) a=c;
return a;
}
int main()
{
int a=3,b=5,c=7,max;
max=Max(a,b,c);
cout<<max<<endl;
return 0;
}
输出:7
注意事项:
1.内联函数可节省运行时间,但是增加了目标代码的长度(代码也是占内存的)。
2.内联函数中不能包含太复杂的语句,例如 for , if , switch 等语句。
3.内联函数比较灵活,并不是一个指令性的函数,只是程序员对编译系统的一种建议,不一定会执行。
4.内联函数适用于高频率使用,但代码很短的函数(最好不超过5行)。
5.含有递归的调用函数不可以设置成内联函数。
6.内联函数要在被调用之前定义。
14.带默认参数的函数
例子:
#include<iostream>
using namespace std;
int max(int a = 3,int b = 5,int c = 7) //a,b,c均带有默认值
{
if(b>a) a=b;
if(c>a) a=c;
return a;
}
int main()
{
int a = 100;
int b = 200;
cout << max() << endl; //第一种 无具体实际参数,使用默认值计算
cout << max(a) << endl; //第二种 有一个实际参数,a不使用默认值,b 和 c使用默认值
cout << max(a,b) << endl;
return 0;
}
输出:7
100
200
注意事项:
1.声明函数时,可以给形式参数初始化一个默认值。调用时,如果没有具体的实际参数,使用默认值进行计算。
2.调用函数时,所给的实际参数的最低个数 = 形式参数的个数 - 默认参数的个数。
3.若形式参数有一部分初始化默认,有一部分不初始化默认。默认值要从最右边放起。
15.函数重载
(大致地提一下,这部分内容没有那么简单。)
作用:方便处理和实现功能相同,形参列表(数据类型,参数个数,参数顺序)不同的问题。
例子:
#include<iostream>
using namespace std;
int add(int a,int b,int c){ //有3个参数
int num;
num=a+b+c;
return num;
}
long add(long a,long b){ //数据类型不同
long num;
num=a+b;
return num;
}
double add(double a,double b){
double num;
num=a+b;
return num;
}
int main(){
int a=3,b=7,c=8;
long d=1000,e=2000;
double f=1.3,g=2.8;
cout<<add(a,b,c)<<endl;
cout<<add(d,e)<<endl;
cout<<add(f,g)<<endl;
return 0;
}
输入:18
3000
4.1
注意事项:
1.函数名相同,但是参数数据类型,个数,顺序至少有一个不一样。
2.函数重载不能与带默认值函数起冲突。
int add(int a,int b)
int add(int a,int b,int c=3) //起冲突了
3.返回值类型并不能决定是否是函数重载。
4.运算符重载:
&:取地址运算符;按位与运算符;引用。
<<:cout<< ;向左移。
16.函数模型
(大致地提一下,这部分内容没有那么简单。)
作用:当运用函数重载需要过多的函数,那么当个参数个数相同时,可以使用函数模型来简化程序。
例子:
#include<iostream>
#include <string.h>
#include <assert.h>
using namespace std;
template <typename T1> //T1为虚拟数据类型
T1 add(T1 a,T1 b,T1 c){
return a+b+c;
}
int main(){
int a = 3, b = 7, c = 8;
long d = 1000, e = 2000, f = 3000;
double g = 2.8, h = 1.3, i = 3.6;
cout << add(a,b,c) << endl; //三个数都是int类型
cout << add(d,e,f) << endl; //三个数都是long类型
cout << add(g,h,i) << endl; //三个数都是double类型
return 0;
}
输出:18
6000
7.7
注意事项:
1.建立一个通用函数,函数类型和参数类型可以不指定,使用一种虚拟的类型。
2.凡是函数体相同的多个函数,都可以使用函数模型。
3.typename指数据类型模板;class指类模板。
——————————————————结束符——————————————————————
这个只是大致上的总结,有很多地方并不全面(12-16)。如果有写错的地方,欢迎大家指出。蟹蟹~