【c++】 c++入门

目录

一.命名空间 : (解决命名冲突)

二.输入输出(标准输入输出流)

三.函数重载 (和返回值类型无关)

四.extern "C"

五.缺省参数

六.引用

七. 内联函数

八.auto关键字

九.基于范围的for循环

十.指针空值


一.命名空间 : (解决命名冲突)

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

   2. 定义的三种方式 : 

    普通

    namespace a1
    {
        int a;
        //可以定义变量,也可以定义函数
        int add(int x,int y)
        {
            return x + y;
        }
    }

 

    嵌套

    namespace a1
    {
        int a;
        namespace a2
        {
            int b;
        }
    }

    分段

    //分段定义时,每一段里面的变量和函数都要不同,否则会出现重定义
    namespace a1
    {
        int a;
    }
    namespace a1
    {
        int b;
    }

    3.访问成员 : (三种方式)

        a. 命名空间 + 作用于限定符 :: 成员

a1::a;

        b. using + 命名空间 + 作用于限定符 :: 成员    (using a1::a)

 using a1::a;

 

        c. using + namespace + 命名空间(不建议使用, 可能会造成命名污染)

 using namespace a1;  //不建议使用,容易造成命名空间污染

 

 

 

二.输入输出(标准输入输出流)

    1.不用增加数据格式控制

    2.相对C语言的scanf比较安全,不用传址

    3.可以连续输入输出

    int a , b;
    char c;
    cin >> a >> b;

三.函数重载 (和返回值类型无关)

    c++支持函数重载,函数名重载规则 : 底层通过算法把函数名与参数结合,构造了一个底层全局唯一的函数名.

    c++ : 函数名 + 类型首字母

    参数个数不同

    参数类型不同

    参数顺序不同

 

四.extern "C"

    一般用于混合编程

 

五.缺省参数

    声明或者定义函数时,给参数指定一个默认值,在调用时,如果没有指定实参则使用指定值,如果指定则使用指定       实参

    1. 全缺省 : 所有的形参为默认值

    2.半缺省 : 部分为默认值,从左向右依次赋值

    3.声明或者定义,二者选其一

六.引用

    int a = 10;
    int &ra = a;

    1.引用不用开辟空间

    2.引用底层还是用指针实现的

    3.引用和指针的不同点:

(1). 引用在定义时必须初始化,指针没有要求

(2). 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体

(3). 没有NULL引用,但有NULL指针

(4). 在sizeof中含义不同:引用结果为引用类型的大小但指针始终是地址空间所占字节个数(32位平台下占4个字节)

(5). 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小

(6). 有多级指针,但是没有多级引用

(7). 访问实体方式不同,指针需要显式解引用,引用编译器自己处理

(8). 引用比指针使用起来相对更安全

七. 内联函数

  inline int add(int a,int b)

       1. inline是一种以空间换时间的做法省去调用函数额开销。所以代码很长或者有循环/递归的函数不适宜使用作为内联函数。

       2. inline对于编译器而言只是一个建议,编译器会自动优化,如果定义为inline的函数体内有循环/递归等等,编译器优化时会忽略掉内联。

       3. inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会找不到。

八.auto关键字

    1.使用auto定义变量时必须对其进行初始化

       auto a = 10;
       auto a;    //错误

    2.用auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时则必须加&

    int x = 10;
    auto a = &x;
    auto* b = &x;
    auto& c = x;
    cout << typeid(a).name() << endl;
    cout << typeid(b).name() << endl;
    cout << typeid(c).name() << endl;

    3.引用必须显示 & 符号

    4.在同一行定义多个变量

    auto a = 1, b = 2;
    auto c = 3, d = 4.0; // 该行代码会编译失败,因为c和d的初始化表达式类型不同

 

九.基于范围的for循环

1.普通

    void TestFor()
    {
        int array[] = { 1, 2, 3, 4, 5 };
        for(int e : array)
        cout << e << " ";
    }

2.迭代器

vector<int> v;
for(const auto& e : v)
{
    cout << e << endl;
}

 

十.指针空值

    int *nptr = nullptr;//系统会隐式转换成int*
    cout << typeid(nullptr).name() << endl;

    1.nullptr : 不用包含头文件,c++将它当做新的关键字引入

    2.在C++11中,sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同。

    3.尽量用nullptr

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值