c与c++
c语言更多是面向过程的,c++是面向过程和面向对象的,而其中的面向对象是通过面向过程实现的
c++在c的基础上增加了新的内容,同时是完全兼容c的 。换句话说,c++是c的增强版。
c++命名空间
与C语言不同的是,C++在解决命名冲突问题时的方法有两个:
、、、
//示例代码
namespace A
{
变量a;
变量b;
}
namespace B
{
变量a;
变量b;
}
、、、
方法一:命名空间名::变量名
其中 "::"为作用域运算符
using namespace A::a
意为此时的变量 a是命名空间A里的变量a
方法二:using namespace 命名空间名; 变量
将using namespace A ;写在要使用该命名空间里变量的函数之前
标准输入输出流
操作流就是在操作文件
cin:标准输入流对象
cout:标准输出流对象
cin >> a; //通过键盘输入给a赋值
**cout << a; ** //将a的值输出到显示屏
引用
引用的目的
1弱化指针
2不会开辟空间,减少临时空间的使用
如何引用
*方法:*数据类型 & 引用名 = 变量名;
*例子:*int a=0; int &b=a;
注意
1引用时必须初始化
2访问引用就是在访问变量
const 修饰的引用
const 修饰的引用为只读,其也可以是常量的别名
目的- 防止实参被修改-
== const int &a=100 <=> #define a 100 ==
虽然作为函数的形参,但是与define作用相同
函数重载
功能类型,函数名相同,参数不同(个数和类型),与返回值无关,这样的函数就互为重载。
函数重载的原理
- g++在编译的时候会对函数名结合参数类型和个数进行重命名,所以在函数调用时是按照重命名之后的函数名进行调用的 *
由此可见,使用g++编译代码时就已经将功能函数重命名了。
** 默认参数**
函数在声明时形参可以有默认值,如果函数在调用时传参了就使用传进来的值,否则就使用默认值。
注意默认值必须从依次从右向左
例如int add(int a=0,int b=0,int c=0);
其中,a可以没有默认值,b不可以没有默认值
C++如何调用c库的函数
一个库中的函数既可以被c++程序调用,也可以被c程序调用。因此,如何告诉g++不要重命名?如何判断此时的编译器是gcc还是g++?是个问题。
规定如果是g++就打印”g++”,如果是gcc就打印”gcc”
方法1
#ifdef __cplusplus //g++
printf(“g++\n”);
#else
printf(“gcc\n”);
方法2
printf(“%d\n”, sizeof(‘a’));
//如果是gcc编译则输出4,如果是g++编译则输出1
实际使用
分别使用指针和引用实现两个数的交换
#include<iostream>
using namespace std;
void exchange_1(int * x,int * y)//指针交换
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
void exchange_2(int & x,int & y)//引用交换
{
int temp;
temp = x;
x = y;
y = temp;
}
int main()
{
int x=0;
int y=0;
cout << "please input two numbers:" << endl;
cin >> x >> y;
cout << "before change: " << "x:" << x << ",y:" << y << endl;
exchange_1(&x ,&y);
cout << "after change_1:" << "x:" << x << ",y:" << y << endl;
exchange_2(x , y);
cout << "after change_2:" << "x:" << x << ",y:" << y << endl;
return 0;
}
运行结果