• 第一章 C++编程基础


    第一章 C++编程基础

    1.1 如何撰写C++程序

    赋值 assignment
    复合赋值 (compound assignment) +=

    函数(function)是一块独立的程序代码序列(code sequence),能够执行一些运算,包含4个部分:
    返回值类型(return type)、函数名称、参数列表(parameter list),以及函数体(function body)
    函数的返回值:通常用来返回运算结果 习惯上,令main()返回零,若返回一个非零值,表示程序在执行过程中发生了错误。
    函数的名称:最好能够提供某些信息
    main并非是程序语言定义的关键词,执行C++程序的编译系统,会假设程序中定义有main()函数,如果我们没有定义,程序将无法执行

    1.2 对象的定义与初始化

    类(class),是用户自定的数据类别(user-defined data type)。
    class机制让我们得以将数据类别加入到我们的程序中,并有能力识别它们。
      赋予我们“增加程序内之型别抽象化层次”的能力。
    class的定义:
    头文件中:声明该clss所提供的各种操作行为(operations)
    程序代码文件:包含这些操作行为的实现内容(implementation)

    标准“输入/输出 程序库”:iostream,包含相关的整套classes,用以支持对终端机和文件的输入和输出。

    语句是C++ 程序的最小独立单元。
    声明语句(declaration statement)
    表达式(expression)
    如果没有写return语句,会被自动加上。
    字符常量:可打印字符、不可打印字符

    在自己的应用程序中定义新的class时,也应该为每一个class提供它们自己的output运算符

    所谓命名空间(namespace)是一种将库名称封装起来的方法。通过这种方法,可以有效和应用程序发生命名冲突的问题(所谓命名冲突是指在应用程序内两个不同的实体[entity]具有相同名称,导致程序无法区分两者。命名冲突发生时,程序必须等到该命名冲突获得解析[resolve]之后,才得以继续执行)。命名空间像是在众多名称的可见范围之间竖起的一道道围墙。

    让命名空间中的名称曝光:using namespace std;

    每个对象都属于某个特定的数据类型。对象名称如果设计得好,可以让我们直接联想到该对象的属性。数据类型决定了对象所能持有的数值范围,同时也决定了对象应该占有多少内存空间。

    C++内置的数据类型:布尔值(Boolean)、整数(integer)、浮点数(floating point)、字符(character)。

    int num_tries(0); //构造函数语法(constructor syntax)

    “用assignment运算符(=)进行初始化”这个操作沿袭C语言。如果对象属于内置类型或者对象可以单一值加以初始化,这种方式就没有问题。但如果对象需要多个初值,比如标准库中的复数(complex number)类,这时就需要用构造函数初始化语法(constructor initializat syntax):
    #include <complex>
    complex<double> purei(0, 7);

    当“内置数据类型”与“程序员自行定义的class类型”具备不同的初始化语法时,我们无法编写一个template使它同时支持“内置类型”与“class类型”。

    转义字符(escape sequence)

    1.3 撰写表达式

    条件运算符(conditional operator)
    cout << cnt % line_size ? ' ' : '\n';

    递增(increment) 递减(decrement) 前置(prefix) 后置(postfix)

    任何一种关系运算符(relational operator)的求值结果不是true就是false。
    关系运算符:相等、不等、小于、大于、小于等于、大于等于

    if(user_more == false) 等效于 if(!user_more)

    1.4 条件语句和循环语句

    关于switch-case,为什么要加break:
    一旦有一个case匹配了,就会顺序执行后面的程序代码,而不管后面的其他case是否匹配,直到遇见break或者switch的大括号才结束执行

    为什么不设计成只有匹配case才执行呢,这样就不用break了。这就问Bjarne大大了,但是这样也有利用之处,利用这一特性可以让好几个case执行统一语句

    这种所谓的“向下穿越”的行为模式,可以用下面的例子解释(是否还记得成绩等级判断了):
    switch(num %10 ){
    case 10:
    case 9: cout <<"优秀"; break;
    case 8:
    case 7: cout <<"良好"; break;
    ...
    default : cout <<"不及格";
    }

    1.5如何运用Array和Vector

    Array和Vector
    Array定义:(类型 名字 大小)
    int a[10];
    Vector:(类型 名字 大小)
    vector<int> a(10);
    Vector是class template

    off-by-one错误(差一错误、算错边界、大小差一错误、一位偏移的错误):就是数组或Vector越界错误

    Array初始化:
    a[10]={1,2,3,4,5,6,7,8,9,0};或者不指定大小,让编译器根据初值的数量,自行计算出数组的大小
    Vector初始化:
    定义之后,只能一个一个的初始化a[0] =1; a[1]=2;...a[9]=0;
    或者用已初始化的数组作为该vector的初值:vector<int> a1(a, a+10);
    遍历:for ( vector<string>::iterator iter = text.begin(); iter != text.end(); ++iter )
    另一种遍历是:和Array的一样用下标运算符[]遍历


    1.6 指针带来弹性

    指针为程序引入了一层间接性。

    访问一个由指针所指的对象——提领(dereference)——取得“位于该指针所指向内存地址上”的对象——在指针之前用*号

    任何指针都可以被初始化,或是令其值为0,即是不指向任何对象。
    int *pi =0;
    if( pi && *pi != 1024) ...

    vector<int> *seq_addrs[ seq_cnt ] = {
    &fibonacci, &lucas, &pell,
    ...
    };
    seq_addrs是个array,其元素类型为vector<int> *

    rand()和srand()
    srand(最大值)
    rand_num = rand() %n;

    检查fibonacci vector的第二个元素是否为1 if( !fibonacci.empty() && ( fibonacci[1] == 1 ) )

    . dot成员选择运算符(member selection operator)
    如果使用指针,必须改用arrow成员选择运算符 pv->empty()
    调用empty() 之前,先检验pv是否为非零值 pv && !pv->empty()
    empty() 为空返回1 非空返回0
    如果使用下标运算符(subscript operator),先提领pv,下表运算符的优先级较高, 提领操作要加括号
    if( pv && ! pv->empty() && ( ( *pv )[1] == 1 ) )

    1.7 文件的读写

    #include <fstream> //对文件进行读写操作,头文件
    定义输出文件:ofstream outfile ( "seq_data.txt" );
    定义读取文件:ifstream infile( "seq_data.txt" )
    while( infile >> name ){
    infile >> nt >> nc;
    }

    iofile.seekg(0);

    seekg()可将文件位置重新定位至文件的起始处。

    cerr 代表标准错误输出设个(standard error)。和cout一样,cerr将其输出结果导至用户的终端机。
    cerr的输出节诶过并无缓冲(bufferred)情形——立即显示与用户终端机上。

    操控器(manipulator) endl 插入一个换行符,并清除输出缓冲区(output buffer)的内容。
    其他操控器:hex oct setprecision(n)

    千万别指望有人理解你
  • 相关阅读:
    用django2.1开发公司官网(上)
    vue常用手册
    xadmin+django2.0删除用户报错,get_deleted_objects() takes 3 positional arguments but 5 were given
    Vue+koa2开发一款全栈小程序(9.图书详情页)
    Vue+koa2开发一款全栈小程序(8.图书列表页)
    Vue+koa2开发一款全栈小程序(7.图书录入功能)
    Vue+koa2开发一款全栈小程序(6.个人中心)
    Vue+koa2开发一款全栈小程序(5.服务端环境搭建和项目初始化)
    java中基本类型double和对象类型Double
    vb中的除法
  • 原文地址:https://www.cnblogs.com/Rodge/p/5132712.html
Copyright © 2020-2023  润新知