1.文件本身区别
c语言是.c文件;c++是.cpp文件(头文件不变)。
2.包含头文件方式:
包含本身头文件无区别(写在哪个路径下就用哪个包含)#include”myString.h“。
包含库目录:
c语言中采用原方式#include<stdio.h>,也可用c++方式(c++包含c语言库的时候)#include<cstdio>加c去.h。c++自身头文件#include<iostream>。
3.命名空间
用namespace声明的,命名语法:
创建方式:
namespace 空间名{
cout<<"这是一个命名空间";
int a = 1;
void print(){}
}
iint main(){
{
//用空间名限定去访问
空间名::a=1;
空间名::print();
return 0;
}
void 空间名::print(){
cout>>"HelloWorld!"
}
作用:增加标识符使用率,C语言同一个作用域下不允许定义相同的标识符,同一个文件中,不同命名空间内可以起相同的标识符。(命名空间只能是全局变量)
::作用域分辨符:
空间名限定,类名限定(后面讲)
用来标识全局变量
int a=1;
int main(){
int a=2;
printf("%d\n",a);//a=2(就近);
printf("%d\n",::a);//a=1(全局)
using语法 ,可以省略前缀的写法
using namespace 空间名; //就可以省略当前的空间名 //只在当前作用域{}下有效
注意二义性问题。
空间名的嵌套与空间内容访问
namespace A
{
int a=1;
namespace B
{
int b=1;
}
}
A::B::b=2; //剥洋葱
using namespace A::B;
bb=10;
4.c++基本输入输出:
#include <iostream>
一般情况都会包含命名空间 using namespace std;
输出: cout<< 做输出
C++支持C语言的格式控制字符
输入: cin>>做输入
强制类型转换
(int)a、int(a)
清空缓冲区
fflush(stdin)
setbuf(stdin,NULL)
5.新的数据类型
布尔类型
占用内存是一个字节
计算机非零表示成立,只有0或者指针空表示不成立
一般充当函数返回值,或者开关
正常输出是0和1
C++专有的赋值方式,false和true(用boolalpha)
指针类型
NULL->nullptr
引用类型(起别名(底层指针实现))
void NikeName(){
int a=1;
int& b=a;
//b就是a,a就是b(不存在拷贝)
}
c++的常量要求更严格
报错注意会修改const。
常引用(两种写法)
int& x=1;//报错
const int& x=1;
int&& x=1;//右值引用(只能给右值起别名,不能给左值起别名)(提供一个修改右值的接口)
用法体现(函数内修改值)
void numA(int a){
a=1;
}
void numAA(int& a){
a=2;
}
void changeA(){
int aa=100;
numA(aa);//拷贝本
cout<<aa<<endl;
numAA(aa);
cout<<aa<<endl;
}
函数返回值(增加左值使用)
和指针一样不能返回局部变量的引用
int& getValue(){
return g_num;
}
返回值就是一个值,所以不能当作左值来用,如getdata()=1001,但是如果返回引用就可以(返回引用就是返回变量本身)
新标准中自动推断类型
自动推断类型auto类型: 必须根据赋值的数据推断类型,不能直接推断
函数思想:
内敛思想 inline关键字
什么样的函数可以成为inline,短小精悍(空间换时间)
在结构体中或者类种实现的函数默认内敛
函数重载: C++允许同名不同参数函数存在(优先调用类型一直的函数,如果没有再找可以转换的)
参数数目不同
参数类型不同
参数顺序不同(一定建立在不同类型的基础上)
函数缺省: C++中允许给函数形参初始化(缺省其实是一种重载的综合写法)
缺省顺序 必须从右往左缺省,缺省的参数中间不能存在没有缺省的
没有参入参数,使用的是默认值