C++(一)

作用域命名控制


冒号作用域::

::a      \\全局变量的a

std::a    \\命名空间std的作用域下的a

命名空间namespace

namespace A

{

      int a=0;                       //变量

      void foo()                      //函数

      {

            cout<<"hello"<<endl;

      }

      struct a{};          //结构体

      class b{};          //类

      namespace B         //嵌套命名空间

     {

            int a=50;

     }

}

namespace newA=A;              //取别名

namespace                     //命名空间没有名字

{

      int a=100;   //相当于static int a;

}
  1. 必须定义在全局范围
  2. 可以存放变量,函数,结构体,类
  3. 定义可以重名,相当于合并

using的声明指令

作用:使得指定标识符可用

void test

{

      using A::a;      //声明命名空间A的a可用

      using A::foo();  //声明命名空间A的foo函数可用



      cout<<a<<endl;  //打印的是命名空间A的a

      foo();          //不用加作用域便可用命名空间A的foo





      int b=100;      //当作用域有冲突,会有二义性,编译出错

      using  B::b;

      cout<<b<<endl;



}

using的编译指令

作用:使整个命名空间可用

void test()

{

       int a=100;              //不会产生二义性

       using namespace A;      //使整个命名空间可用

       cout<<a<<endl;          //就近打印的是函数内的a

}

helloword程序

include<iostream>          //标准的输入输出头文件

using namespace std;       //使用命名空间的编译指令使标识符cout可用

void main()

{

     cout<<"helloworld"<<endl;

}


C++较于C的增强


全局变量的检测增强

C语言下:

int a;  //定义

int a;  //声明

int a;  //声明

C++语言下:

int a;  

extern int a;

extern int a;

C++中形参必须有类型、返回值和实参个数做检测

C语言:函数的形参类型可以不写,没有返回值可以返回,实参个数不做检测。

C++语言:函数的形参类型必须不写,没有返回值不可以返回,实参个数做检测。

更严格的类型转换

C语言:

char *p=malloc(1024);

C++语言:

char *p=(char *)malloc(1024);

struct类型增强

C语言:

struct stu a;

C++语言:

stu a;   //struct关键字可以不写

bool类型增强

C语言:

#include<stdbool.h>

C++语言:

不用头文件

三目运算符增强

C语:

c=a<b?a:b;  //返回的是a或b的值

C++语言:

a<b?a:b=100;  //返回的是变量a或b可以再赋值

const修饰

C语言:

const  局部变量;  //存在栈区,可通过地址修改值

const  全局变量;  //存在常量区,不能修改; 其他文件使用要用extern修饰声明外部可用,默认外部链接属性

C++语言:

const  局部变量;  //存在符号表,不能修改

const  全局变量;  //存在常量区,不能修改; 默认内部链接属性,extern修饰变外部链接属性

const和define

const int max=1024;      //有类型(int),有作用域(局部/全局)

define max 1024          //没类型,没作用域

引用


实质:取别名

原类型 &别名=旧名

type &new=old;

用法:

  1. 一旦初始化,不能改变指向
  2. 定义时必须初始化
  3. 不能指NULL
  4. 可以引用任意类型包括数组
  • int (& arr)[5]=a;
  1. 指针引用(type=int *)


内联函数


宏函数:替换发生在预处理阶段,不能作为类的成员函数,易出错,省去函数调用

#define ADD(a,b) a+b

int c=ADD(a,b)*5  //a+b*5

内联函数:替换发生在编译阶段,可作类的成员函数,不会出错,省去函数调用

inline int ADD(int a, int b)

{

       return a+b;

}

int c=ADD(a,b)*5  //(a+b)*5

注:在类内部定义的函数自动成为内联函数

内联函数的限制:

  1. 不能存在循环语句
  2. 不能过多条件语句
  3. 函数体不能过于庞大
  4. 不能对函数进行取址操作


函数的默认参数


void foo(int a=1, int b=2);

注:

  1. 设置了默认参数,往后的参数都要设置
  2. 声明和定义只能设置一处
  3. 有实参传入用实参,没有用默认参数


占位参数


void foo(int a,int=4)

给函数形参设置的,调用也要传参,也可设置占位参数为默认参数



函数的重载


(函数名相同)

发生重载条件:

  1. 同一作用域
  2. 参数个数不同
  3. 参数类型不同
  4. 参数顺序不同
  5. 函数返回值不能作为条件
  6. 默认参数会产生二义性


extern "C"


C++编辑器编译.c的函数时,需要声明extern "C"

1.cpp中:

# include "1.h"

int main()

{

      cout<< ADD(2,3) << endl;

}

1.c中:

int ADD(int a,int b)

{

       return a+b;

}

1.h中:

#pragma once



#if __cplusplus

extern "C"{

#endif



int ADD(int a,int b);



#if __cplusplus

}

#endif


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值