C++基础总结(C与C++不同,缺省参数,重载,引用,命名空间)

学完了面向过程的C语言,现在开始学习面向对象的C++,先了解一下面向过程与面向对象的区别:

  面向过程就是分析出解决问题的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个调用就行。
  
  面向对象是把构成问题事物分解成各个对象,建立对象的目的,不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。

C与C++的不同

1.关键字的不同:

  C99标准下C语言的关键字有32个

  C98标准下C++的关键字有64个
  
2.变量定义声明位置不同

  C语言变量必须在函数开始声明
  
  C++可以在函数任意位置声明(注意作用域)
  
3.函数

  返回值类型:C++新增了bool类型,可以返回bool型,也可以没有返回值
  
  参数:C++支持缺省参数
  
  函数名修饰方式不一样:C++可以出现同名函数(重载)
  
4.工程

  用VS创建工程时,C语言工程后缀是.c,而C++后缀是.cpp

5.C++ 的struct内可以有函数,而C不行。

让C++文件以C风格编译:extern “C” int Fun();

缺省参数:缺省参数是声明或定义函数时为函数的参数指定一个默认值,在调用该函数时,如果没有指定实参则才用该默认值,否则使用指定的实参。

全缺省:

  void Fun(int a = 10, int b = 20, int c = 30)
  {
    cout << a << b << c << endl;
  }

  int main()
  {
    Fun();
  }


半缺省:

   void Fun1(int a, int b, int c = 30)
  {
    cout << a << b << c << endl;
  }

  int main()
  {
    Fun1(10,20);
    system("pause");
  }

注意:缺省参数只能从右往左给参数。

     缺省参数要放在函数声明位置,在声明和定义中只能出现一次。

     可以是常量或全局变量。

一词多义—重载

  函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数,类型,顺序)必须不同(有一个满足即可),常用来处理功能类似数据类型不同的问题。
int add(int a, int b)
{
    return a + b;
}

double add(double a, double b)
{
    return a + b;
}

long add(long a, long b)
{
    return a + b;
}
int main()
{
    add(10, 20);
    add(10.0, 20.0);
    add(10L, 20L);
    return 0;
}

注意:仅返回类型不同不能构成重载
如:
int add(int a, int b)
{
    return a + b;
}

double add(int, int b)
{
    return a + b;
}

引用:引用不是新定义一个变量,而是给已存在的变量取了一个别名,编译器不会为引用变量开辟内存空间,他和他引用的变量共用同一块内存空间

void Fun()
{
    int a = 10;
    int&ra = a;
    cout << a << ra;
}
引用的特性:

   1.引用在定义时必须初始化
  
  2.一个变量可以有多个引用
  
  3.一旦引用一个实体,再也不能引用其他实体

常引用:

void Fun()
{
    const int a = 10;
    //int& ra = a;   //该语句编译时会出错,a为常量
    const int& ra = a;

    //int& b = 10;   //该语句编译时会出错,b为常量
    const int& b = 10;

    double d = 2.33;
    //int& rd = d;   //该语句编译时会出错,类型不同
    const int& rd = d;
}
数组引用:
void Fun()
{
    int a[10];
    int(&ra)[10] = a;
}

看下面这个例子:

int& Fun()
{
    int a = 0;
    a += 10;
    return a;
}

int main()
{
    int& ra = Fun();
    printf("ra = %d\n", ra);
    printf("ra = %d\n", ra);
    printf("ra = %d\n", ra);
    system("pause");
    return 0;
}
结果为:
10
随机值
随机值
注意:返回值如果是引用类型,返回值的声明周期一定要比函数的长(不能返回栈上空间)
引用和指针的区别:

   在底层的处理方式相同,引用当作指针来处理
  
  引用变量在底层对应指针的类型: 类型* const   //类型指实体的类型
  
  1.引用不可以为空,指针可以为空

   2.引用不可以改变指向

   3.引用的大小是所指向的变量的大小,指针是指针本身的大小

   4.引用比指针安全(不存在空引用,指针为空时易出错)

   5.引用在定义时必须初始化

   6.有多级指针,没有多级引用

   7.指针需要手动寻址,引用通过编译器寻址

命名空间 : 在C++中,变量,函数和类都是大量存在的,这些变量,函数和类的名称将都存在于全局命名空间中,会导致很多冲突,使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。

定义命名空间:

//命名空间可以嵌套
namespace N2
{
    int a;
    namespace N3
    {
        int i, int z;
    }
}

//同一个工程中允许出现同名的命名空间,编译器会将同名命名空间的内容整合
namespace N1
{
    int b;
}

//没有名称的命名空间只能在当前文件中使用(和static类似)
namespace
{
    int arr[10];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值