C++与C的区别 作业
1. 区别以及命名空间
C++在某些程度上是兼容C的
注意区分 C++工程源文件后缀名为cpp C语言工程源文件为.c
头文件引入的区别
#include<stdio.h> //C语言的头文件引入方式
#include<cstdio> //C++可以在前面加入C 表示C中的标准输入输出头文件,并且不用加.h
#include<iostream> //C++的标准输入输出头文件
命名空间的引入
在C语言中 相同作用域下是不允许出现相同标识符
但是C++ 用命名空间是允许相同标识符的存在
命名空间的使用:
namespace fox
{
int a;
int b;
}
namespace fox2
{
int a;
int b;
}
int a2=12;//该为全局变量
int main()
{
int a2=0;//该为局部变量
std::cout<<a2<<std::endl;//按照就近原则 它会使用局部变量的值
std::cout<<::a2<<std::endl;//用::标识为全局变量 它会使用全局变量的值
fox1::a=2;
fox::a=40;
}
这样即使在相同作用域下也可以存在相同的标识符
注意点: ::这个是作用域分辨符 它可以用来访问命名空间内的东西,也可以告知编译器
该标识符来自与哪一个命名空间内 (它还可以用来标识全局变量)
2.using 语法的引入
using 语法用于省略前缀
C++的输出用 std::cout 输入用std::cin
不加using 要标识它是那个 cout 或者cin 是哪一个类里面成员
注意点1:using语法有作用域 ,所以一般写在最上面,方便不用写前缀
注意点2:using语法可以配合命名空间的使用,方便不用标识空间名
namespace fox
{
int a ;
int b ;
}
int main()
{
fox::a=20;
using namespace fox;
a=1000;
std::cout<<a<<std::endl;//没加之前
using namespace std; //注意作用域范围
cout<<a<<endl; //加了
return 0;
}//离开该大括号内 using namespace std;作用域失效
使用using 之后要注意不要出现二义性
namespace fox
{
int a=23;
}
namespace fox2
{
int a=25;
}
using namespace fox;
using namespace fox2;
int main()
{
//错误写法:
a=5;//此处产生了二义性 由于都用using省略空间名 ,编译器无法识别使用那一个空间内的标识符
//正确写法:
fox::a=100;//自己告诉编译器使用谁就好
return 0;
}
3.bool 类型
C++内有一个新的类型是 bool 类型
它只占用一个字节 ,它的输出只有 0(false)和1(true)
充当返回值或者开关使用。。。
4. & 引用 理解为起别名
左值引用
namespace fox
{
int a = 23;
}
using namespace fox;
using namespace std;
int main()
{
int& b2 = a; //相当于给fox内的a起了别名
b2 = 100; //操作b2相当于操作a
cout << a << endl;//a为100
}
常引用 const
using namespace std;
int main()
{
int a = 100;
int b = 200;
const int& x = a;
//const int& x = 200;
//x= 300; 不可以被修改,只读模式
cout << a << endl;
}
右值引用 &&
using namespace std;
int main()
{
int a = 100;
int&& x = 100; //右值引用
x += 100086; //提供可以修改的接口
cout << x << endl; //x==100186
}
4.auto 类型
using namespace std;
int main()
{
auto a = 100;//自动推断为 int类型
//auto a;//错误写法,必须有数据类型赋值才能推断
}
可以推断函数指针 超级好用的
装杯就用函数指针,不想装杯就用auto
4.C++函数思想
内敛思想 inline
多次调用短小重复的函数 可以用inline标识
它会在编译过程中将标识inline直接使用二进制存储,牺牲空间提高运行的速度
inline void printf()
{
printf("123");
}
int main()
{
printf();
return 0;
}
函数重载思想
C语言不允许同名函数存在 C++可以存在
但必须遵守以下规则
函数参数个数不同
int print(int a,int b)
{
}
int print(int a) //函数参数个数不同
{
}
函数参数类型不同
int print(int a,int b)
{
}
int print(char a,int b) //函数类型不同
{
}
函数参数顺序不同
int print(int a , char b)
{
}
int print(char a,int b) //函数参数顺序不同
{
}
函数缺省思想
int sun(int a,int b,int c.int d)
{
return a+b+c+d;
}
给函数参数初始化缺省,就是当没有参数传入时,使用默认值
int sun(int a,int b=0,int c=1.int d=2)
{
return a+0+1+2;//当bcd没有参数的时候,应当是这样
}
注意点:
函数缺省必须重右往左
int sun(int a,int b=1,int c.int d=0)//为错误写法,必须从右到左依次缺省
{
return a+b+c+d;
}