zoukankan      html  css  js  c++  java
  • 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


    特殊的符号,表示:重启一行。和“ ”等效。


    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.字符串


    包含 的数组。


    3.字符串的处理函数包含在<cstring>中,即C中的string.h


    Strlen长度+1为数组长度(算上 )。


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


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


             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


     


    
  • 相关阅读:
    网络之传输层
    局域网的物理组成
    网络基础
    RAID磁盘阵列
    mount挂载和交换分区swap
    Linux文件系统
    sed命令基础2
    sed命令基础
    LVM基础
    磁盘配额基础
  • 原文地址:https://www.cnblogs.com/helay/p/7133958.html
Copyright © 2011-2022 走看看