c++primer 学习笔记
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 学习笔记的更多相关文章
- C++ Primer学习笔记(三) C++中函数是一种类型!!!
C++中函数是一种类型!C++中函数是一种类型!C++中函数是一种类型! 函数名就是变量!函数名就是变量!函数名就是变量! (---20160618最新消息,函数名不是变量名...囧) (---201 ...
- C++ Primer学习笔记(二)
题外话:一工作起来就没有大段的时间学习了,如何充分利用碎片时间是个好问题. 接 C++ Primer学习笔记(一) 27.与 vector 类型相比,数组的显著缺陷在于:数组的长度是固定的,无法 ...
- C++ Primer学习笔记(一)
始终对C++念念不忘,看过 一个32岁入门的70后程序员给我的启示 之后,心情激荡,更是一发不可收拾. 认真地说,我不是一个执着的人,见异思迁,好读书而不求甚解,兼之情绪化(~~ 某些方面),于是怒 ...
- C++ Primer学习笔记2--c++标准库中的 vector、string 和 bitset 类型
一.string #include <string> using std::string 初始化函数: string s1; 默认构造函数 s1 为空串 ...
- C++ Primer 学习笔记_32_STL实践与分析(6) --再谈string类型(下)
STL实践与分析 --再谈string类型(下) 四.string类型的查找操作 string类型提供了6种查找函数,每种函数以不同形式的find命名.这些操作所有返回string::size_typ ...
- C++ Primer 学习笔记_35_STL实践与分析(9)--map种类(在)
STL实践与分析 --map类型(上) 引: map是键-值对的集合. map类型通常能够理解为关联数组:能够通过使用键作为下标来获取一个值,正如内置数组类型一样:而关联的本质在于元素的值与某个特定的 ...
- C++ Primer 学习笔记_43_STL实践与分析(17)--再谈迭代器【中】
STL实践与分析 --再谈迭代器[中] 二.iostream迭代[续] 3.ostream_iterator对象和ostream_iterator对象的使用 能够使用ostream_iterator对 ...
- C++Primer学习笔记(1)
序: 为了重新扎扎实实地再深入学习一遍C++,我选择了C++ Primer这本经典.又开了这个系列的随笔,用于记录学习过程中遇到的一些有趣的问题和心得.同时,也是想通过写随笔的方式督促自己不断进步,争 ...
- C++ Primer学习笔记二
vector<int> a(10,0); for(vector<int>::iterator itor=a.begin();itor!=a.end();itor++) *ito ...
- C++ Primer学习笔记一
/* 题目要求把字符串BRGBBGRRGBBGBBBGRRGBGRG按RGB顺序排列,空间复杂度为O(1) */#include<iostream> using namespace std ...
随机推荐
- python 中面向对象编程简单总结2
1.python中继承的特点: (1)总是从一个类继承,默认为object类 (2)不要忘记调用super.__init__方法来初始化父类的方法 def __init__(self,args): s ...
- 【转】OJ提交题目中的语言选项里G++与C++的区别
原文链接:http://blog.polossk.com/201405/c-plus-plus-g-plus-plus G++? 首先更正一个概念,C++是一门计算机编程语言,G++不是语言,是一款编 ...
- C# 订单号的生成
/** * 根据当前系统时间加随机序列来生成订单号 * @return 订单号 */ public static string Generat ...
- java 基础语言: 方法
方法 格式: 修饰符 返回值类型 方法名(参数类型 参数名1, 参数类型 参数名2, ...) { 方法体; return 返回值; } 方法使用的注意事项: 1,方法不调用,自己不执行 2,方法中不 ...
- spark介绍3
- sheel远程执行
https://www.cnblogs.com/softidea/p/6855045.html shell远程执行: 经常需要远程到其他节点上执行一些shell命令,如果分别ssh到每台主机上再去执行 ...
- HashSet小试牛刀
HashSet详细介绍 import java.util.HashSet; import java.util.Iterator; public class Main { public static v ...
- LVM与RAID阵列
创建LVM分区: 相关命令: pvcreat /dev/sdb{1,2,3} 创建物理卷 vgcreat test_vg1 /dev/sdb1 创建卷组 vgcreat test_vg2 -s ...
- node后台启动
node启动后会占用当前shell 后台启动方式: 1.用forever进行管理 npm install -g forever forever start index.js 2.使用nohub命令 ...
- SQL存储原理及聚集索引、非聚集索引、唯一索引、主键约束的关系(补)
索引类型 1. 唯一索引:唯一索引不允许两行具有相同的索引值 2. 主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型.主键索引要求主键中的 ...