《Essential C++》 基础知识

来源:互联网 发布:sql 索引超出数组界限 编辑:程序博客网 时间:2024/05/17 08:24

以下是本人觉得有必要记录的关于C++的基本常识


对象初始化方式:


传统的与C相同的方式:        int num = 0;

构造函数语法:                     int num(0);

 

    “assignment运算符(=)进行初始化这个操作是沿袭C语言而来,如果对象属于内建型,或者对象可以单一值加以初始化,这种方式就没有问题。例如以下的string class:

String sequence_name = “Fibbonacci”;

如果对象需要多个初始值,这种方式就没有办法完成任务了。以标准程序库中的复数类为例,它就需要两个初始值,一个实部和一个虚部。以下便是用来处理“多值初始化”的构造函数初始化语法(constructor initialization syntax)

#include <complex>

complex <double> purei(0, 7)

 

 

运算符的优先级


运算符优先级简列于下,位置在上者的优先级高于位置在下者,同一行的各种运算符具有相同的优先级,其评估次序视出现在表达式中的位置而定(从左至右)。

逻辑运算符 NOT

算术运算符 (*, /, %

算术运算符 (+, -)

相对关联运算符 (<, >, <=, >=)

相对关联运算符 (==, !=)

逻辑运算符 AND

逻辑运算符 OR

赋值(assignment) 运算符

 

ArrayVector

 

定义 :

Array

const int seq_size = 18;

int pell_seqp[seq_size];

 

Vector:

#include <vector>

Vector<int> pell_seq( seq_size);

 

初始化:

Array

Int elem_seq[] = {1, 2, 3, 5};

 

Vector

Vector<int> elem_seq( seq_size )

elem_seq[0] = 1;

elem_seq[1] = 2;

//…

 

 

指针

 

type_of_object_point_to * name_of_pointer_object

 

    当我们调用一个函数时,会在内存中建立起一块特殊区域,称为“程序栈(program stack)”。这块特殊区域提供了每个函数参数的存储空间,它也提供函数所定义的每个对象的内存空间——我们称这些对象为local object(局部对象),一旦函数完成,这块内存就会被释放掉,或者说是从程序堆栈中被pop出来。


Pointer参数和reference参数二者之间更重要的差异

    pointer可能(也可能不)指向某个实际对象,当我们提领pointer时,一定要先确定其值并非为0,至于reference则必定会代表某个对象,所以不须做次检查。

if (p)          //判断p是否为NULL

{

         cout << *p << endl

}

 

动态内存管理

    不论local scopefile extent,对我们而言,都是由系统自动管理,第三种存储形式为dynamic extent(动态范围),其内存系由程序的自由空间(free store)配置而来,有时也称为heap memory(堆内存),此种内存必须由程序员自行管理,其配置是通过new表达式来达成的,而其释放则经由delete表达式完成。

 

new表达式的形式如下:

new Type;

此处的Type可为任意内建型别,也可以是程序指导的class型别,new表达式亦可写成:

new Type(initial_value);

例如:

int *pi;

pi = new int

便是先由heap配置出一个型别为int的对象,再将其地址赋值给pi,默认情形下,由heap配置而来的对象,均为经过初始化。

 


C++ 允许我们为所有参数或者部分参数设定为默认值。这样,当用户已单一参数调用函数式,不会出问题。

 

    关于默认参数值得同,有两个不甚直观的规则,第一个规则是,默认值的决议(resolve)操作由最右边开始进行,如果我们为某个参数提供了默认值,那么这个参数右侧的所有参数都必须也具有默认参数。

    第二个规则是,默认值只能够指定以此,可以在函数声明处,也可以在函数定义处,但是不能够在两个地方都指定。为了更高的可见度,我们通常将默认值置于函数声明处,而非定于出。(头文件)

 

 

局部静态对象(Local Static Object)

 

    为了节省函数间的通信问题而降对象定义于file scope内永远是一种冒险,通常,file scope对象会打乱不同函数间的独立性,使他们难以理解。

    局部静态对象与局部非静态对象不同的是,局部静态对象所处的内存空间,即使在不同的函数调用过程中,依然持续存在

 

inline只是对编译器提出的一种请求,编译器是否执行这项请求,需视编译器而定。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 初一就不想读书怎么办 孩子懒得写作业怎么办 初中学生讨厌学习怎么办? 小学不写作业怎么办 幼儿园小朋友不愿意上学怎么办 幼儿园孩子不愿意上学怎么办 宝宝不愿意上幼儿园怎么办 孩子不爱上幼儿园怎么办 宝宝不爱上幼儿园怎么办 宝宝不爱去幼儿园怎么办 幼儿园宝宝不爱写字怎么办 小孩贪玩不爱学习怎么办 老师对幼儿不好怎么办 小孩不愿写作业怎么办 小孩怕老师厌学怎么办 幼儿园怕老师厌学怎么办 孩子很怕老师怎么办 孩子怕外教老师怎么办 家长打老师老师怎么办 被学生骂了怎么办 老师经常打孩子怎么办 老师每天打孩子怎么办 小孩不想去幼儿园怎么办 宝宝不想上幼儿园怎么办 小孩不爱学英语怎么办 孩子抵触学英语怎么办 初三了英语不好怎么办 孩子入园焦虑怎么办 家长总是说孩子怎么办 幼师打了小朋友怎么办 幼儿园老师欺负孩子怎么办 被老师冷落怎么办豆瓣 不满老师对孩子怎么办 老师总找茬孩子 怎么办 老师总针对孩子怎么办 老师看你不舒服怎么办 高中孩子不爱学习怎么办 孩子太倔不听话怎么办 老师老说孩子怎么办 孩子13不懂礼貌怎么办 老师不重视你 怎么办