第一章 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)

第一章 C++编程基础的更多相关文章

  1. 第一章 Windows编程基础(1~4课)

    第一课:从main到WinMain 第二课:窗口和消息 第三课:MFC编程 第四课:MFC应用程序框架 概括: Win32的两种编程框架:SDK方式.MFC方式 1. SDK方式:使用WinMain入 ...

  2. #《Essential C++》读书笔记# 第一章 C++ 编程基础

    前言 Stanley B.Lippman 先生所著的<C++ Primer>是学习C++的一本非常优秀的教科书,但<C++ Primer>作为一本大部头书,显然不适合所有的初学 ...

  3. 第一章. ActionScript 语言基础

    第一章. ActionScript 语言基础 1.0. ActionScript 3.0 Cookbook 概述 1.1. 新建一个 ActionScript project 1.2. 自己定义应用程 ...

  4. 第一章 oracle数据库基础

    第一章   oracle数据库基础 1.oracle简介-->数据库管理系统    1.1:数据库    1.2:全局数据库名    1.3:数据库实例    1.4:表空间    1.5:数据 ...

  5. 回顾PHP:第一章:PHP基础语法

    第一章:PHP基础语法 一.常量: 1.1.define()函数:define(‘R’,’5’,’true’); //R:常量名,5:常量值,true:常量名对大小写不敏感,为false时表示对常量名 ...

  6. Objective-C 基础教程第三章,面向对象编程基础知

    目录 Objective-C 基础教程第三章,面向对象编程基础知 0x00 前言 0x01 间接(indirection) 0x02 面向对象编程中使用间接 面向过程编程 面向对象编程 0x03 OC ...

  7. JAVA 入门第一章(语法基础)

    本人初学java 博客分享记录一下自己的学习历程 java我的初步学习分为六章,有c和c++的基础学起来也简便了很多. 第一章 语法基础 第二章 面向对象 第三章 常用工具类 第四章 文件操纵 第五章 ...

  8. 《Java从入门到失业》第一章:计算机基础知识(三):程序语言简介

    1.3程序语言简介 我们经常会听到一些名词:低级语言.高级语言.编译型.解释型.面向过程.面向对象等.这些到底是啥意思呢?在正式进入Java世界前,笔者也尝试简单的聊一聊这块东西. 1.3.1低级语言 ...

  9. 那些年被我坑过的Python——玄而又玄(第六章 面向对象编程基础)

    面向对象编程: 面向对象顾名思义,就是把组织代码的粒度从函数级别抽象到对象级别,对象是通过类来生成的,类可以想象为模板或进本框架而对象是在原有模板或框架的基础上增加详细信息的实体,类,有分类.聚类的含 ...

随机推荐

  1. EF中 实现延迟加载 lazyload

    1.创建数据库 2.利用数据库 生成视图 生成2个实体类 和一个model1类 3.写代码 (1) 创建 上下文对象 (2) (3)查询结果 注释: 延迟加载的原因,因为我们操作数据库不会那么简单, ...

  2. ajax实现分页页签

    在一些搜索列表的页面中,我们会遇到一些需要处理页签的需求,一般这样的页面,要么是在JSP中处理,每次都跳页.这样做是个很方便的方法.但是如果页面上有很多和列表无关,每次都需要重新渲染是不是显得慢了一些 ...

  3. using System.Security.Cryptography

    这个命名空间主要是用来进行加密的一些类. 加密服务: 公共网络(如 Internet)不提供实体之间安全通信的方式. 此类网络上的通信易被读取或甚至被未经授权的第三方修改. 加密有助于防止数据被查看, ...

  4. AngularJS 表达式中添加过滤器实例

    过滤器可以通过一个管道字符(|)和一个过滤器添加到表达式中 历练实例: <!DOCTYPE html><html><head><meta http-equiv ...

  5. malloc动态分配字符串数组“ 一个月内的提醒”

    //输出一个月提醒 #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_R ...

  6. Excel文档数据转成Plist文件

    有时候我们需要导入大量数据到App中静态数据,但数据又是存在Excel中,怎么办? 第一,复制数据粘贴到一个.txt文本文档中 第二,就是撸代码了 比如,我需要导入的数据表有2列字段,name和bar ...

  7. JS - 简单的下载图片至本地

    <iframe id="saveImg" src="图片路径" style="display:none;"></ifram ...

  8. LeetCode969. 煎饼排序

    问题:969. 煎饼排序 给定数组 A,我们可以对其进行煎饼翻转:我们选择一些正整数 k <= A.length,然后反转 A 的前 k 个元素的顺序.我们要执行零次或多次煎饼翻转(按顺序一次接 ...

  9. scapy--初识

    常用的包结构: (1)OSI 5层模型 OSI中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 传 ...

  10. http虚拟主机的简单配置训练

    http的虚拟主机 对于某些web访问站点而言,每天的访问量很少,因此真正的放一台服务器去进行web站点是很 浪费资源的,因此我们选择了虚拟主机 web处理模块的分类(MPM) 1.perfork 一 ...