1.1 编写简单的c++程序

函数4元素:函数类型、函数名、形参表、函数体

调用GNU(UNIX)

g++ prog1.cc -o prog1 //生成可执行文件prog1,UNIX下默认a.out

1.2初窥输入/输出

*格式化输入与输出iostream库包涵输入流istream和输出流ostream

*标准库定义了四个io对象包括:cin(see-in标准输入)、cout(see-out标准输出)、cerr(标准错误,用于输出错误警告和信息)、clog(产生程序执行的一般信息)

*头文件include 自定义头文件用””

*输出操作符”<<”(作用是将其右操作数写入左操作数的ostream对象中)

*endl成为操纵符,作用是换行和刷新缓冲区

*作用域操作符”::”

*输入操作符”>>”(从左istream对象读取数据写入右操作数)

1.3注释

单行注释和多行注释(单行注释用双斜杠//,双行注释使用定界符/ /)

//

/**/

/


*

*

*/

1.4控制结构

1.5类的简

类类型(class type)

通常类类型存储在文件中,文件以.h为后缀

类型Sales_item的一个对象(一个Sales_item对象,一个Sales_item)

*成员函数(由类定义的函数,通常称为类方法)

*点操作符(.)通过左操作数取得右操作数,仅用于类类型的对象,左操作数必须是对象,右操作数必须是类的成员

2.1基本内置类型

*wchar_t宽字符型,存储汉字日语,不能用单个字节存储

*对于整型的赋值,编译器会将越界值取模后再赋值

!C++中将负数赋值给unsigned是完全合法的,其结果是取模后的值

Float精度6位,double类型精度为10位

long double 扩展精度浮点数,运行代价较高

2.2字面值

*true和false是布尔值的字面值

*在字符字面值前加L就够得到wchar_t类型的宽字符字面值

L’a’

*转义字符可由字母,八进制十六进制表示 \a \7 \xddd

2.3变量

复制初始化和直接初始化,复制初始化用等号,直接初始化将初始化式放在圆括号

Int value = 15;

Int value(15);

*string类型在标准库中定义,string定义在std命名空间中

*内置类型在函数体外系统自动初始化为0,在函数体内定义内置类型变量不进行自动初始化

*extern声明变量,不分配存储空间

2.4const限定符

Const定义一个对象为常量,定义时必须初始化

在全局作用域定义的const变量不能被其他文件使用,除非声明extern

2.5引用

变量的别名,定义引用时必须初始化

*Const引用是指指向const对象的引用

Const引用的初始化值也要是const

const int a = 10;

const int &ia = a;

?2.5.3不太懂

2.6typedef名字

用于类型的说明符,是所定义类型的同义词

用于一种类型作用多个目的

typedef int zheng;

zheng a; //int a

2.7枚举

枚举的定义

enum 枚举类型名 {成员1,成员2...};

*枚举的成员是常量,默认第一成员值为0,之后的每个成员再递增

*初始化枚举成员的值必须是一个常量表达式

*对枚举类型赋值只能通过枚举成员或同一枚举类型的其他枚举对象进行

2.8类类型

数据成员的初始化不能在定义时给定

访问标号可以多次的出现在类的定义中

*定义类类型class关键字和struct关键字区别在于第一个访问标号前的任何成员class隐式指定为private而struct默认为public-

2.9编写自己的头文件

头文件用于声明函数,变量,而非定义。但是对于类、常量表达式初始化的const对象、inline内联函数则可以在头文件中定义,原因是每个源文件定义是相同的

*头文件用“”表示自定义头文件,非系统头文件查找通常开始于源文件的位置

3.1命名空间的using声明

3.2标准库string类型

String类型初始化

String s1;
String s2(s1);
String s3(“value”);
String s4(n,’c’); //填充n个c

用标准输入操作符写入string对象时,忽略开头和结尾的空格

用输入操作符读取string对象,返回输入流是否有效

String IO操作getline函数,接受两个参数

1输入流对象,2string对象

*getline函数读取不含换行符,如果第一个字符就是换行符string对象将被置为空string对象

?输入操作符和getline读取string对象的区别。

String操作

String.size()      string::size_type	返回string对象大小
String.empty() L 返回string对象是否为空串
string[n] C 返回string对象第n个字符,其中n的类型是一个string::sizetype类型
    • < > != 都是字符串操作符惯有含义

?string.size()处理汉字如何显示

!任何string类型的size操作结果的变量必须为string::size_type类型

string对象的连接操作

String + string
String+=string
String + ”abc” + string与字符串字面值的连接

string类型在使用下标操作符来访问对象中的单个字符,下标应为一个string::size_type类型的值

for (string::size_type index = 0;index!=str.size() ;index++)
str[index] = ‘*’;

cctype头文件定义各种字符操作函数P77

3.3标准库vector类型

Vector是一个类模板,用来定义多种数据类型,特点是动态增长

初始化

vector<T>  v1;		vector保存类型为T的对象,默认构造函数为v1为空
vector<T> v2(v1); v2为v1的副本
vector<T> v3(n,i); v3保存n个值为i的元素
vector<T> v4(n); 保存初始化元素的n个副本

初始化元素的值取决于vector元素类型,如int为0,含默认构造函数的对象初始化元素为默认构造函数的值

vector <string> vs(10)		//含10个空字符串

vector对象操作

vector.size();				//返回vector对象元素个数
vector.empty(); //检测vector对象是否为空
vector.push_back(t); //在vector对象末尾增加一个值为t的元素
vector[n] //返回vector对象中位置为n的元素

成员函数size返回相应的vector类定义的size_type类型,注意不要丢失vector的元素类型

vector :: size_type;

3.4迭代器简介

每种容器都定义自己的迭代器类型,包括vector容器类型

vector <int>::interator iter;			//容器vector<int>定义的interator类型

每种容器定义一对begin和end函数,用于返回迭代器,如果容器中有元素,begin()返回的迭代器指向第一个元素,end()返回的迭代器指向末端元素的下一个,如果此容器为空begin()和end()返回的迭代器相同

vector <int>::interator iter = v1.begin();

begin操作返回的迭代器可进行自增使其指向下一个元素,而end迭代器不指向任何元素所以不能对它进行自增

*iter  ==  v1[0]
++iter == v1[1]

12.1类的定义

public

可被使用该类型的所有代码使用

private

可被其他类成员访问

构造函数:与类同名的成员函数,初始化数据成员

构造函数初始化列表由成员名和带括号的初始值组成,跟在构造函数的形参表之后,并以冒号开头

成员函数: 类内定义的成员函数默认为inline,类外定义需指明在类作用域

封装:将底层元素组合形成新的、高层次实体的技术,函数和类都是封装的一种形式

成员函数的重载

类定义以分号结束,即类定义时可接对象定义列表

前向声明即在定义类成员之前声明一个类,此类为不完全类型,此时不能创建类对象

12.2this指针

this指针由编译器隐含地定义

返回this 返回一个引用 该引用指向执行操作的那个对象

const成员函数,this的类型是指向construction类类型对象的const指针,不能改变this指向的对象,也不能改变this所保存的地址,非const成员函数可以改变this指向的值(对象),不能改变this所保存的地址

!const成员函数不能返回指向类对象的普通引用,只能返回
this作为一个const引用

?mutable修饰

?12.2.4

12.3类作用域

!即使两个类具有相同的成员列表,它们也是不同的类型,因为作用域不同

12.3.1

*如果一个函数定义为外联函数,其返回类型在类中定义,则此返回值类型必须使用完全限定的类型名Screen::index

*函数局部作用域高于类的作用域(如成员函数形参与类成员名相同),如果要使用类成员需要在成员名前this->或classname::

*如果名字相同的全局对象被屏蔽了,可以通过全局作用域来限定名字(::)

?习题12.18

12.4 构造函数

构造函数:C++用于构建类的新对象时需要调用的函数,该函数无返回类型!(注意:是“无”! 不是空!(void))。

构造函数在类public中定义

构造函数的初始化列表为类的一个或多个数据成员指定初值

默认构造函数通常称为合成的默认构造函数

未提供显示初始值,用来创建对象的构造函数

*构造函数的初始化1.函数头进行初始化(初始化式) 2.函数体进行初始化

!必须对const成员或者引用类型成员以及没有默认构造函数的类类型的任何成员进行初始化式

?习题12.22

12.4.2默认实参

!类包含内置或复合类型成员时,对定义在全局作用域对象才初始化

?12.44

12.5友元函数

友元机制允许一个类将对其非公有成员的访问权授予指定的函数或类

声明以friend 开始,友元声明只能出现在授权类内部

*友元可以是普通的非成员函数,其他类成员函数或整个类

*将整个类设为友元,友元类的所有函数都可以访问授予友元关系类的非公有成员

*将成员函数声明为友元时,函数名必须用该函数所属的类名字加以限定

*友元函数可以在类的内部定义,该函数的作用域扩展到外围该类定义的作用域

*类必须将重载函数集中每一个希望设为友元的函数都声明为

12.6static类成员

类可以定义类静态成员

*static数据成员独立于该类的任意对象而存在

*类可以定义static成员函数,static成员函数没有this形参(因为它不是任何对象的组成部分),static成员函数也不能声明为const,它可以直接访问所属类的static成员,但不能直接使用非static成员

*类外定义static成员函数,无需重复指定static保留字,该保留字只出现在类定义体内部声明处

static成员在类定义体内部声明,在类外作定义和初始化(static成员不是通过类构造函数进行初始化,而是在定义时初始化)

	Int Myclass::myStaticMer=20;	//需要完全限定 static关键字用于声明不在定义时出现

static数据成员声明为const时,需要在类内初始化,但还需在类外定义

	Static const int period =30;	//类的定义体中初始化,还需在内外定义
Const int Account::period; //类外部定义时,不必再指定初始值

?12.6.2.2

位运算

按位异或^

不同为1,相同为0
10100101
01000101
--------------
11100000

按位或|

只要出现1就为1
10100101
01000101
--------------
11100101

按位与&

只要出现0就为0
10100101
01000101
--------------
00000101

~补码,按位取反

只要出现0就为0
10100101
--------------
01011010

<<、>>

0000 0011   <<  3   =  0001 1000
0001 1000 >> 4 = 0000 0001

c++primer 学习笔记的更多相关文章

  1. C++ Primer学习笔记(三) C++中函数是一种类型!!!

    C++中函数是一种类型!C++中函数是一种类型!C++中函数是一种类型! 函数名就是变量!函数名就是变量!函数名就是变量! (---20160618最新消息,函数名不是变量名...囧) (---201 ...

  2. C++ Primer学习笔记(二)

    题外话:一工作起来就没有大段的时间学习了,如何充分利用碎片时间是个好问题. 接  C++ Primer学习笔记(一)   27.与 vector 类型相比,数组的显著缺陷在于:数组的长度是固定的,无法 ...

  3. C++ Primer学习笔记(一)

    始终对C++念念不忘,看过 一个32岁入门的70后程序员给我的启示  之后,心情激荡,更是一发不可收拾. 认真地说,我不是一个执着的人,见异思迁,好读书而不求甚解,兼之情绪化(~~ 某些方面),于是怒 ...

  4. C++ Primer学习笔记2--c++标准库中的 vector、string 和 bitset 类型

    一.string    #include <string>  using std::string    初始化函数:    string s1;        默认构造函数 s1 为空串 ...

  5. C++ Primer 学习笔记_32_STL实践与分析(6) --再谈string类型(下)

    STL实践与分析 --再谈string类型(下) 四.string类型的查找操作 string类型提供了6种查找函数,每种函数以不同形式的find命名.这些操作所有返回string::size_typ ...

  6. C++ Primer 学习笔记_35_STL实践与分析(9)--map种类(在)

    STL实践与分析 --map类型(上) 引: map是键-值对的集合. map类型通常能够理解为关联数组:能够通过使用键作为下标来获取一个值,正如内置数组类型一样:而关联的本质在于元素的值与某个特定的 ...

  7. C++ Primer 学习笔记_43_STL实践与分析(17)--再谈迭代器【中】

    STL实践与分析 --再谈迭代器[中] 二.iostream迭代[续] 3.ostream_iterator对象和ostream_iterator对象的使用 能够使用ostream_iterator对 ...

  8. C++Primer学习笔记(1)

    序: 为了重新扎扎实实地再深入学习一遍C++,我选择了C++ Primer这本经典.又开了这个系列的随笔,用于记录学习过程中遇到的一些有趣的问题和心得.同时,也是想通过写随笔的方式督促自己不断进步,争 ...

  9. C++ Primer学习笔记二

    vector<int> a(10,0); for(vector<int>::iterator itor=a.begin();itor!=a.end();itor++) *ito ...

  10. C++ Primer学习笔记一

    /* 题目要求把字符串BRGBBGRRGBBGBBBGRRGBGRG按RGB顺序排列,空间复杂度为O(1) */#include<iostream> using namespace std ...

随机推荐

  1. freemaker优缺点

    1.什么是FreeMarker?FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写.FreeMarker被设计用来生成HTMLWeb页面,特别是基于MVC模式的 ...

  2. Matlab中的数据预处理-归一化(mapminmax)与标准化(mapstd)

    一.mapminmax 意思是将矩阵的每一行处理成[-1,1]区间,此时对于模式识别或者其他统计学来说,数据应该是每一列是一个样本,每一行是多个样本的同一维,即对于一个M*N的矩阵来说,样本的维度是M ...

  3. APUE(4)---文件和目录 (1)

    一.引言 上一章执行I/O的基本函数(打开文件.读文件和写文件),本章将描述文件系统的其他特征和文件的性质,我们将从stat函数开始,并逐个说明stat结构的每一个成员以了解文件的所有属性.在此过程中 ...

  4. Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

    环境:linux,mysql5.5.21 错误:Host is blocked because of many connection errors; unblock with 'mysqladmin ...

  5. [QPlugins]概述

    一个需求:显示一个窗体,并显示"Hello,World".(这个例子不一定合适) 用DELPHI 实现上面的需求非常的简单,用向导创建一个项目,同时也创建好了一个窗体,再拖一个La ...

  6. [原创] 改善 Firemonkey Canvas 几何绘图质量问题(移动平台)

    说明: Fiiremonkey 的跨平台能力,大家有目共睹(一码同介面跨四平台),唯独移动平台在几何绘图方面,质量始终不尽人意,我也曾试着去修正(如:修正曲线平滑问题),也曾找过第三方案(如:AggP ...

  7. [leetcode] 2. Pascal's Triangle II

    我是按难度往下刷的,第二道是帕斯卡三角形二.简单易懂,题目如下: Given an index k, return the kth row of the Pascal's triangle. For ...

  8. [LeetCode 题解]: Anagrams

    Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be ...

  9. [Erlang03]Erlang有哪些好用的静态分析工具?

    1. dialyzer Dialyzer starts its analysis from either debug-compiled BEAM bytecode or from Erlang sou ...

  10. 系统数据库--恢复Master数据库

    实现步骤:关闭SQL SERVER 服务,使用DAC登录 在cmd下还原master 重启SQL SERVER 服务