您的位置:首页 > 编程语言 > C语言/C++

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++