C++ Primer Plus 第6版 中文版随书笔记 标签: c++ 2015-07-22 18:58 205人阅读 评论(0)


//随时更新

Chapter 2


对象是类的特定实例,而类定义了数据的存储和使用方式。


 


#include<iostream>


 


int main()


{


       using namespace std;                                                                     //编译指令——名称空间(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();


       return 0;


}


 


1.名称空间


using namespace std;


编译指令——名称空间(namespace)支持:不同厂商的产品,如microflop::danda()Pissine::wanda()。该指令写在函数中,则只作用于该函数。


Std是一个名称空间,其中放置了类,函数和变量。这样,cout其实是std::coutendl其实是std::endlistreamostream是两个类。


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.


Cincout有智能对象的功能,按变量输出。


6.char默认下既没有符号,也不是有符号。需要定义时说明。


7.const的使用:定义符号常量时可以明确变量类型,比#define更好,且能明确作用域。


8.数据类型转换


强制类型转换:(typenamevalue或者typenamevalue


 


 


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);


4string


通过std::string来使用。用变量来存储字符串.


定义为:string str1


添加<string>


操作有:赋值=,拼接+,附加+=


5.struct


Struct 类型名{


^……


^……


}


定义:类型名 变量名


成员访问:变量名.成员名


结构声明的位置(很重要):局部声明和外部声明。


如何传递和返回结构,在chapter7


6.结构中的位字段(了解即可,可以用位操作代替)


7.共用体(union


Union 类型名{


……


……


……


};


一次只能存储一个数据类型,intdouble,或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 =new int;


*pt = 1000;


10.使用new分配内存。


为一个数据对象(结构和数据类型)获得分配内存的格式:typename *pointer_name= new typename.


用完内存要删:delete


int *pt =new int;


*pt = 1000;


Delete pt


11.使用new创建动态数组


动态联编(dynamic binding


格式:typename *pointname= new type_name[elementnumber]


Delete []pointname.


使用时直接用指针名当数组名使用即可:pointname[n]


 


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>


double cube(double a);


double refcube(double &ra);


int main()


{


         using namespace std;                                                                                        //编译指令——名称空间(namespace)支持:不同厂商的产品,如microflop::danda()Pissine::wanda()


         double x =3.0;


         cout <<cube(x)<< " = the cube of "<<x<<endl;                                                                                                               //starta new line


         cout <<refcube(x) << " = the cube of" <<x << endl;


         cin.get();


         return 0;


}


double cube(double a)


{


         a *= a*a;


         return a;


}


double refcube(double &ra)


{


         ra *= ra*ra;


         return ra;


}


上程序实际上并没有改变x的值,存疑


使用时可以加const参数,写成:double cubeconst double &ra)保证函数内部ra值不被改变。


NOTES


函数返回引用时(即free_throw & func(……))最重要的一点是:避免函数返回终止时,不再存在的内存单元引用。


5.继承


使特性从一个类传递到另一个类的特性叫继承。1.派生类继承基类的方法。2.基类引用可以指向派生类的对象,无需强制转换。


6.处理文件相关的一个程序示例:


#include<iostream>


#include<cstdlib>


#include<fstream>


using namespace std;


void file_it(ostream &os,double fo, const double fe[],int n);


const int LIMIT = 5;


int main()


{


         ofstream fout;


         const char *fn ="1.txt";


         fout.open(fn);


         if (!fout.is_open())


         {


                   cout <<"can'topen " <<fn << "\n";


                   exit(EXIT_FAILURE);


         }


         double objective;


         cout <<"Enteryour focal length of your telescope objective in mm: ";


         cin >>objective;


         double eps[LIMIT];


         cout <<"enterthe focal length, in mm, of " << LIMIT<< "eyepieces" <<endl;


         for (int i =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;


         return 0;


}


void file_it(ostream &os, double fo, const double fe[], int n)


{


         ios_base:: fmtflags initial;


         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 (int i =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{


……


}(没有分号)


名称空间可以嵌套:


Aaaaabbbbbc


2.using声明和using编译命令


声明:using std::cin


编译:using namespace std


 



posted on 2015-07-22 18:58  ImageDC  阅读(104)  评论(0编辑  收藏  举报