zoukankan      html  css  js  c++  java
  • 《Essential C++》读书笔记 之 C++编程基础

    《Essential C++》读书笔记 之 C++编程基础

    2014-07-03

    1.1 如何撰写C++程序

      头文件

      命名空间

    1.2 对象的定义与初始化

    1.3 撰写表达式

      运算符的优先级(precedence)

    1.5 如何运用Arrays(数组)和Vectors(向量)

    1.6 指针带来弹性

       指针的使用 

    1.1 如何撰写C++程序


     返回

    函数(function)是一块独立的程序代码序列(code sequence),能够执行一些运算。它包含4个部分:

    • 返回值型别(return type)
    • 函数名称
    • 参数列(parameter list)
    • 函数主体(function body)

    函数的返回值通常用来表示运算结果。main()函数返回整数型别。mian()的返回值用来告诉调用这,这个程序是否执行正确。习惯上,程序执行无误时,我们令main()返回零。若返回一个非零值,表示程序发生了错误。

     1 #include <iostream>
     2 #include <string>
     3 using namespace std;
     4 int main()
     5 {
     6     string user_name;
     7 
     8     //cout read as (see out)
     9     cout << "Please enter your name: ";
    10     //cin read as (see in)
    11     cin >> user_name; 
    12     cout<<"Hello, ";
    13     cout<<user_name;
    14     cout<<"... and goodbye!
    ";
    15 
    16     return 0;
    17 }

    头文件

    欲使用class,我们必须先在程序中含入其头文件。表头文件可以让程序知道class的定义。C++标准的“输入/输出 程序库”名为iostream,其中包含了相关的整套classes,用以支持对终端机和文件的输入与输出。

    命名空间

    上述代码第3行 using namespace std; 其中std是一个命名空间。

    所谓命名空间,是一种将程序库名称封装起来的方法。通过这种方法,可以避免和应用程序发生命名冲突(若两个不同的实体(entity)具有相同名称,就会发生命名冲突,导致程序无法区分两者)。

    若要在程序中使用string class以及cin、cout这两个iostream类对象,我们不仅得含入,还得让命名空间std内的名称曝光。而所谓的 using directie 是让名称空间中的名称曝光的最简单方法:

    using namespace std;

    图1 头文件iostream中的命名空间 

    1.2 对象的定义与初始化


     返回

    初始化有两种方式:

    • 以assignment运算符(=)初始化: int num_tries =0;
    • 以构造函数语法初始化: int num_tries(0);

    内建字符常量(有时也称为“转义序列,escape sequence”),如:

    • ' ' 换行字符(new line)
    • ' ' 跳格字符(tab)
    • '' null

    1.3 撰写表达式


     返回

    运算符的优先级(precedence)

    如果同一个表达试中使用多个运算符,其核定(evaluate)顺序是由预先定义的优先级决定的。如果想改变内建的运算符优先级,可利用小括号。

    运算符优先级如下(位置在上者优先级高,同一行,左高):

    逻辑运算符 NOT
    算术运算符 (*, /, %)
    算术运算符 (+, -)
    相对关联运算符 (<, >, <=, >=)
    相对关联运算符 (==, !=)
    逻辑运算符 AND
    逻辑运算符 OR
    赋值(assignment)运算符

    C语言运算符优先级 详细列表

    1.5 如何运用Arrays(数组)和Vectors(向量)


     返回

    array,容量定义时就已确定,必须是个常量表达式

    int pell_seq[18];

    vector,定义时,必须含入vector头文件。vector是个class temple,类型写在角括号内,容量写在小括号内(容量不一定得是个常量表达式),如下代码所示:

    1 #include <vector>
    2 vector<int> pell_seq(seq_size);

    1.6 指针带来弹性


     返回

    指针(pointer)的运用,舍弃以名称指定的方式,间接的存取对象。我们可以操控指针(代表某特定内存地址),而不再直接操控对象。

    指针增加了程序的弹性,但同时也增加了直接操控对象时所没有的复杂度,如下代码所示:

    1     int ival = 1024;
    2     int *pi;  //pi是个int型别的对象指针
    3     pi=&ival; //将pi的初值设为ival所在的内存地址

    如果要存取一个由指针寻址的对象,我们必须对该指针进行提领(dereference)操作--也就是取得“位于该指针所指之内存地址上”的对象。在指针之前加上*号即可:

    1     if(*pi!=1024)  //读取ival的值
    2         *pi=1024;  //写值至ival

    指针的第二个复杂的地方是,指针可能并不指向任何对象,使得程序在执行期间出错(对不指向任何对象的指针进行提领(dereference))。
    一个未指向任何对象的指针,其内含地址为0。有时我们称之为null指针。通过以下代码检验指针所含地址是否为0:

    1     int *pi=0;      
    2     if(pi&&*pi!=1024)  //if(pi&&...)只有在pi含有一个非0值时,其核定结果才是true

     指针的使用

    1     vector<int> fibonacci, lucas, pell, triangular, square, pentagonal;
    2     //pv为指向vector<int>数列的指针
    3     vector<int> *pv=0;
    4     pv=&fibonacci;
    5     //...
    6     pv=&lucas;
    7 
    8     //seq_addrs是个array,其元素型别为vector<int> *。seq_addr[0]所含有的值是fibonacci vector的地址。
    9     vector<int> *seq_addr[6]={&fibonacci, &lucas, &pell, &triangular, &square, &pentagonal};

     使用class object的指针,和使用内建型别的指针略有不同。这是因为class object链接到一组我们可以调用的操作行为:

    1     //.称为dot成员选择运算符
    2     if(fibonacci.empty()&&(fibonacci[1]==1));
    3     //若想通过指针来选择操作行为,必须改用arrow成员选择运算符
    4     if(pv->empty()&&((*pv)[1]==1));
    5     if(seq_addr[0]->empty()&&((*seq_addr[0])[1]==1))
  • 相关阅读:
    数据结构与算法分析(1)引论
    每天一个Linux命令(1)ls命令
    Oracle ->> 层级查询语句(hierarchical query)connect by
    SQL Server ->> GROUPING SETS, CUBE, ROLLUP, GROUPING, GROUPING_ID
    Oracle ->> 日期函数
    Oracle ->> 变量赋值 Demo
    SQL SERVER ->> BCP导出数据到平面文件
    SQL SERVER ->> CXPacket等待类型
    SQL SERVER ->> Wait Stats
    SQL SERVER ->> Columnstore Index
  • 原文地址:https://www.cnblogs.com/Ming8006/p/3823891.html
Copyright © 2011-2022 走看看