重学C++ (一)基础回顾

       由于进了一家敏捷开发的公司,把自己累得不像话,博客也好几个月没更新了,实在惭愧。由于C++基础非常重要,所以打算把平时重学C++的总结,抽时间上传到博客!  

1.切勿乱用带符号类型和无符号类型

#include 
using namespace std;

int main()
{
    unsigned u = 10;
    int i = -42;

    cout<

2.变量声明和定义的关系

● 如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显示的初始化变量,extern如果包含初始值就不再是声明,而变成了定义了;

    extern int I;                             //声明i而非定义i

    int j;                                        //声明并定义j

    extern double pi = 3.1456;    //定义

● 变量能且只能被定义一次,但是可以被多次声明;

● 变量的定义必须出现在且只能出现在一个文件中,而其他文件用到该变量的文件必须对其进行声明,却绝不能重复定义

    t1.h
    #ifndef _t1_H
    #define _t1_H
    int p = 20;
    #endif

    t1.cpp
    #include 
    #include "t1.h"
    using namespace std;
    //extern int p = 10;          //不能重复定义,报错  
    extern int p ;                //声明p已经在t1.h中定义
    int main()
    {
        cout<

3. 复合类型

引用,引用即别名,引用并非对象,它只是为一个已经存在的对象所起的另外一个名字,引用必须初始化。

int i = 1024,i2 = 2048;      //i和i2都是int

int &r = i, r2 = i2;             //r是一个引用,与i绑定在一起,r2是int

int &refVal1 = 10;          //错误:引用类型的初始值必须是一个对象

double dval = 3.14;          

int &refVal2 = dval;          //错误:此处引用类型的初始值必须是int型对象 

● 指针,与引用类似,指针也实现了对其他对象的间接访问

double dval;
double *pd = &dval;        //正确:初始值是double型对象的地址
double *pd2 = pd;          //正确:初始值是是指向double对象的指针
int *pi = pd;              //错误:指针pi的类型和pd的类型不匹配
pi = &dval;                //错误:试图把double型对象的地址赋值给int型指针

int i = 42;                        
int *p ;                   //p是一个int型指针
int *&r = p;               //r是一个对指针p的引用(最简单的方法就是从右向左阅读r的定义,离变量名最近的符号(此例中是&r的符号&)对变量的类型有最直接的影响,因此r是一个引用。声明符的其余部分用以确定r引用的类型是什么,此例中的符号*是说明r引用的是一个指针。最后,声明的基本数据类型部分指出r引用的是一个int指针)

不同点:1.指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象。

             2.指针无须在定义时赋初值,和其它内置类型一样,在块作用域内定义的指针如果没有被初始化,也将有一个不确定的值

4.const限定符

1)const 对象一旦创建后其值就不能再改变,所以const对象必须初始化

const int i = get_size();       //正确:运行时初始化

const int j = 42;                  //正确:编译时初始化

const int k ;                        //错误:k是一个未经初始化的常量

 2)如果想在多个文件之间共享const 对象,必须在变量的定义之前添加extern关键字

//file_1.cc 定义 并初始化了一个常量,该常量能被其他文件访问

extern const int bufsize = fcn();

//file_1.h头文件

extern const int bufsize;     //与file_1.cc中定义的bufsize是同一个      

3)默认状态下,const对象仅在文件内有效(为了支持这一用法,同时避免对同一变量的重复定义,默认情况下,const对象被设定为仅在文件内有效。当多个文件中出现了同名的const变量时,其实等同于在不同的文件中分别定义了不同的变量。)

 

你可能感兴趣的:(重学C++,————学习与研究————)