C++ 知识点

一  audo

     C++11中引入的auto主要有两种用途:自动类型推断和返回值占位。auto在C++98中的标识临时变量的语义,由于使用极少且多余,在C++11中已被删除。前后两个标准的auto,完全是两个概念

      auto自动类型推断,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推断,可以大大简化我们的编程工作。

   map<int, map<int,int> > map_; 

   以下定义很复杂。

   map<int, map<int,int>>::const_iterator itr1 = map_.begin();

   用auto 很简便。 但是个人觉得可读性差

   const auto itr2 = map_.begin(); 

二 extern

   extern 关键字用了声明另一个文件中存在的全局变量,是的本文件可以使用这个数据。

三 register

   register 关键字告诉编译器“尽可能快的访问这个变量”。但是特不能保证是寄存器变量。

   register 不能用来声明全局和静态变量

四 内部连接和外部连接

   内部连接意味着只对正在编译的文件创建存储空间。 用内部连接别的文件可以使用相同的标识和全局变量

   外部连接为所有被编译的文件创建一片单独的存储空间。

   函数之外定义的所有变量(C++ 中除了const) 和函数定义默认为外部连接。

   可以使用关键字static特地前置它们具有内部连接。

五 函数参数为数组

   对于C++, 数据标识符可以看做是数组起始处的只读指针。如果声明一个数据为函数参数, 实质声明的是一个指针。

   void func1(int a[], int size){
       for(int i=0;i<size;i++)

           a[i]=i*i-1;

   }

   void func2(int* a,int size){

       for(int i=0;i<size;i++)

           a[i]=i*i-1;

   }

   以上两个函数完全相同。

   

六 atoi() atol()和atof()

   atoi() atol()和atof() 可以将ASCII字符数组分别转换为int,long,double。

   如atoi(argv[i]);


七 动态存储空间分配

   对于C语言, 使用malloc(),calloc(),realloc()申请存储空间。 用free() 函数释放内存空间

   对于C++,使用关键字new 申请存储空间, 用delete 释放存储空间。

八 Struct

   C++作为对象语言,可以在Struct 中定义函数,这样Struct可以作为对象使用。

   与class 的唯一区别是,Struct 的成员默认为public,class 对象的成员默认为private.


九 作用域解析运算符 ::

   用于指定函数属于哪个对象。

   如:void stash:: inflate(int increase) 是stash 对象的inflate 函数。

   C++ 不能调用未事先声明的对象。 声明一般在头文件中。 主要是定义对象, 并声明属于对象的字段和函数。

   函数中可以使用this 来指定这个对象的地址。


十  function const 

   以上的函数 不能修改类的非static 成员。

   如:int val() const {

   j=3;       // j 是static 成员

   return i;  // i 可以是非static 成员

   }


十一 默认参数

     static void print(const String msg =""){

     }

     函数参数为常量字符串, 如果没有传入参数, 默认为空。


十二 C++ 继承语法

     

class X{
    int i;
public :
    X() {i=0;}
    void set(int ii) {i= ii};
    int read() const {return i;}
    int permute() {return i= i*47;} 
}

class Y: public X{
    int i;
public :
    Y() {i=0;}
    int change () {
        i=permute();
        return;
    }
    void set(int ii) {
        i=ii;
        X::set(ii);
    }
}

从以上程序可以看到,
 如果派生类没有相同的函数名, 可以直接调用(permute());

 如果派生类有相同的函数名, 调用基类函数, 必须标出基类名称(X:: set(ii))。


十三 函数捆绑

    把函数体与函数调用向联系称为捆绑。 早捆绑:捆绑在程序运行之前。 晚捆绑:捆绑发生在运行时。 

    但是为了完成继承的多态变换。 C++ 必须实现晚捆绑。所以C++ 提供了虚函数关键字virtual。

    标志为virtual 的函数, 被继承后是晚捆绑。


十四 纯虚函数的声明和作用

    纯虚函数的声明同样适用关键字 virtual, 并且在其后面加上 =0。

    如: virtual void f() =0;

     

    包含纯虚函数的类是个抽象类。 抽象类不能生成对象。

    必须被继承,实现纯虚函数后才可以生成对象。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值