C++ Primer Plus 第6版 中文版随书笔记
2015-07-22 18:58
633 查看
//随时更新
Chapter 2
对象是类的特定实例,而类定义了数据的存储和使用方式。#include<iostream>
intmain()
{
usingnamespacestd;
//编译指令——名称空间(namespace)支持:不同厂商的产品,如microflop::danda()和Pissine::wanda()
cout<<"come up and c++ me some time";
cout<<endl;
//start a new line
cout<<"you wont regret it"<<endl;
//cout函数
cin.get();
return0;
}
1.名称空间
using namespace std;
编译指令——名称空间(namespace)支持:不同厂商的产品,如microflop::danda()和Pissine::wanda()。该指令写在函数中,则只作用于该函数。
Std是一个名称空间,其中放置了类,函数和变量。这样,cout其实是std::cout;endl其实是std::endl。istream和ostream是两个类。
Using类似一个声明,这样的话,用到哪个名称空间的函数,可以仅声明这个,如using
std::cin。注意到std::cin并不是一个名称空间,因此不用namespace。
2.<<插入运算符
<<表示信息流动的路径。cout<<"you wont regret it"<<endl将"youwont
regret it"和endl传给了cout函数。
Cout可以理解为一个对象,通过它的接口便可以使用它。
3.运算符重载
C中已经存在运算符重载的例子了,所以很好理解。比如*表示乘或者指针解除。
4.控制符(manipulator)
endl
特殊的符号,表示:重启一行。和“\n”等效。
5.定义变量
变量使用前声明即可。
6.类
类是用户定义的一种数据类型。类之于对象就好像类型之于变量。所有演员是一个类,是一个数据类型;***就是该类型的数据,是一个对象,是一个实体。类中不仅包含演员,还包含演员的动作。
7.c++6种语句:
Chapter 3
1.变量命名原则有一点比较重要:以“两个下划线”或“下划线和大写字母”开头的名称被保留给实现。
2.sizeof运算符
包含在<climits>里。
3C11中初始化变量的新方法
{}初始化:int
a={24}或int a{24}或int
a{}则初始化为a=0.
4.注意整型的溢出行为。
5.cout.put函数显示单字符:类似于putchar.
Cin和cout有智能对象的功能,按变量输出。
6.char默认下既没有符号,也不是有符号。需要定义时说明。
7.const的使用:定义符号常量时可以明确变量类型,比#define更好,且能明确作用域。
8.数据类型转换
强制类型转换:(typename)value或者typename(value)
Chapter4
1.声明数组Typename arrayname[];
Typename arrayname[]={*,*,……,*,*};
2.字符串
包含\n的数组。
3.字符串的处理函数包含在<cstring>中,即C中的string.h
Strlen长度+1为数组长度(算上\n)。
getline:面向行的输入,丢弃换行符;cin.getline(name,19);
get():面向行的输入,不丢弃换行符;cin.get(name,19);
4.string类
通过std::string来使用。用变量来存储字符串.
定义为:string str1;
添加<string>
操作有:赋值=,拼接+,附加+=。
5.struct
Struct
类型名{
^……
^……
};
定义:类型名
变量名
成员访问:变量名.成员名
结构声明的位置(很重要):局部声明和外部声明。
如何传递和返回结构,在chapter7
6.结构中的位字段(了解即可,可以用位操作代替)
7.共用体(union)
Union
类型名{
……
……
……
};
一次只能存储一个数据类型,int,double,或long。节省内存。
8.枚举
Enum
类型名 {a,b,c,d,e,f,g};
这样,该类型名则为一个枚举。a,b,c,d,e,f,g为符号常量,对应0~6.
9.指针
一定要在*之前,将指针初始化为一个确切的、适当的地址。如下有错误:
Long *fellow;
*fellow=213213;
注:这样写就没问题了。
int*pt=newint;
*pt=1000;
10.使用new分配内存。
为一个数据对象(结构和数据类型)获得分配内存的格式:typename *pointer_name= new typename.
用完内存要删:delete
int*pt=newint;
*pt=1000;
Delete pt;
11.使用new创建动态数组
动态联编(dynamic binding)
格式:typename *pointname=
new
type_name[elementnumber]
Delete []pointname.
使用时直接用指针名当数组名使用即可:pointname
。
Chapter5
1.基于范围的for循环Double price[5] = {1,2,3,4,5};
For(double x:price)
2.文件尾条件
Chapter7&8
1.函数中使用数组(指针):当且仅当用于函数头或函数原型时,int*arr等于int arr[]。
2.内联函数:
应将c中的宏定义的函数功能用内联实现。格式为:
Inline
函数()
程序很短时才能使用内联函数。
3.引用:变量别名
int&接近
int*
int rats;
int
&rodents = rats;
必须在声明引用变量时进行初始化。
4.函数的引用参数
中参数为(&a)引用时,修改a就是修改x:
#include<iostream>
#include<string>
doublecube(doublea);
doublerefcube(double&ra);
intmain()
{
usingnamespacestd;
//编译指令——名称空间(namespace)支持:不同厂商的产品,如microflop::danda()和Pissine::wanda()
doublex=3.0;
cout<<cube(x)<<" = the cube of "<<x<<endl;
//starta new line
cout<<refcube(x)<<" = the cube of"<<x<<endl;
cin.get();
return0;
}
doublecube(doublea)
{
a*=a*a;
returna;
}
doublerefcube(double&ra)
{
ra*=ra*ra;
returnra;
}
上程序实际上并没有改变x的值,存疑。
使用时可以加const参数,写成:double
cube(const double &ra)保证函数内部ra值不被改变。
NOTES:
函数返回引用时(即free_throw
& func(……))最重要的一点是:避免函数返回终止时,不再存在的内存单元引用。
5.继承
使特性从一个类传递到另一个类的特性叫继承。1.派生类继承基类的方法。2.基类引用可以指向派生类的对象,无需强制转换。
6.处理文件相关的一个程序示例:
#include<iostream>
#include<cstdlib>
#include<fstream>
usingnamespacestd;
voidfile_it(ostream&os,doublefo,constdoublefe[],intn);
constintLIMIT=5;
intmain()
{
ofstreamfout;
constchar*fn="1.txt";
fout.open(fn);
if(!fout.is_open())
{
cout<<"can'topen "<<fn<<"\n";
exit(EXIT_FAILURE);
}
doubleobjective;
cout<<"Enteryour focal length of your telescope objective in mm: ";
cin>>objective;
doubleeps[LIMIT];
cout<<"enterthe focal length, in mm, of "<<LIMIT<<"eyepieces"<<endl;
for(inti=0;i<
LIMIT;i++)
{
cout<<"eyepieces# "<<i+1<<" : ";
cin>>eps[i];
}
file_it(fout,objective,eps,LIMIT);
//写入文件中
file_it(cout,objective,eps,LIMIT);
//显示到屏幕上
cout<<"done"<<endl;
return0;
}
voidfile_it(ostream&os,doublefo,constdoublefe[],intn)
{
ios_base::fmtflagsinitial;
initial=os.setf(ios_base::fixed);
//saveinitial formating state
os.precision(0);
os<<"focallength
of objective: "<<fo<<"mm\n";
os.setf(ios::showpoint);
os.precision(1);
os.width(12);
os<<"f.l.eyepiece";
os.width(15);
os<<"magnification"<<endl;
for(inti=0;i<
n;i++)
{
os.width(12);
os<<fe[i];
os.width(15);
os<<int(fo/fe[i]+0.5)<<endl;
}
os.setf(initial);
cin.get();
}
Chapter9
1.名称空间名称空间可以是全局的,也可以在另一个空间中,但不能再代码段内。
名称空间可以自己定义,格式为:
Namespace{
……
}(没有分号)
名称空间可以嵌套:
Aaaaa:bbbbb:c
2.using声明和using编译命令
声明:using std::cin
编译:using namespace std
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- C++ Custom Control控件向父窗体发送对应的消息
- C++中拷贝构造函数的应用详解