zoukankan      html  css  js  c++  java
  • C++ Primer Plus读书笔记08

    2012-03-09

    1、友元类 类(遥控器,Remote)的所有方法可以访问类(TV)的私有,保护成员

    class TV

    {

         friend class Remote;

    }

    class Remote

    {

    ……

    }//实现

    2、友元成员函数 稍复杂,见P543

    3、类包含:将类对象作为另一个类的成员

           如class Student{string name;};        //包含string 类成员name

           类嵌套:不创建类成员,只定义类型

    4、异常abort()函数    用cstdlib头文件

           作用:向标准错误流cerr发送abnormal program termination

           double func(int x,int y)

    {

    if(y==0)    

    {

        cerr<<”除数不可以为零”<<endl;

        abort();   //发送完abnormal…之后直接终止程序,不返回到main(),相当于exit()

    }

    }

    5、异常机制 throw,try,catch

           int func(int x,int y)

           {

                  if(y==0)         throw “除数不可以为0”;

                  return x/y;

    }

    int main()

    {

           int x,y,z;

           while(cin>>x>>y)

           {

                  try {z=func(x,y);}

                  catch(const char *s) {cout<<s<<endl;       continue;}

           }

           cout<<z;

    }//异常与处理程序匹配时,执行catch代码块

    6、dynamic_cast:类层次中的向上转换

    使用条件:Low和High是两个类,ph,pl类型分别是High*,Low*,则仅当Low是High的可访问基类(直接或间接)时,

           pl=static_cast<Low*>ph;才正确

           解释:Low是基类,所以Low的方法High都有,所以将High指针→Low指针

           反过来不行

    7、读入方法

           char info[100];     string stuff;

    cin>>info;//遇到空格,回车停

    cin>>stuff//遇到空格,回车停

    cin.getline(info,100)//读一行,丢弃回车

    getline(cin,stuff)//读一行,丢弃回车

    cin.get(info,100)//读一行,回车留在缓冲区

    getline(cin,stuff,’*’)//读一行,遇到*停

    cin,getline(info,100,’*’)读一行,遇到*停

     

     

    8、ofstream对象的 open方法要求C语言字符串(而非C++的string)

           例: string filename;         cin>>filename;

                  ofstream fout;

                  fout.open(filename.c_str());

     

    2012-03-10

    1、智能指针 auto_ptr 防止内存泄漏

     

           引入:void func()

    { string *ps=new string (str);

                         str=ps;

    return ;//没加delete ps,则函数结束时指针ps占据的内存被释放,但PS指向的内存没有

               }

    ∴将指针看做类对象,过期时自动析构

    #include<memory>

        auto_ptr<double> p1(new double);

        double *p2=new double;

        *p1=15.1;

        *p2=25.2;      //用法类似,但P1会自动释放,P2必须手动delete

    只能对new分配的内存用auto_ptr对象,不能用于new[]分配的

    2、STL函数 for _each(),random_shuffle(),sort()

    (1)举例:vector<int>test;

    vector<int>::iterator pr;

    for(pr=test.begin();pr!=test.end();pr++)

        func(*pr);

    for_each(test.begin(),test.end(),func);

    //等价,其中前两个参数定义区间,最后一个是函数指针

    此函数应用于区间中个元素,且不能修改元素的值,作用:避免使用迭代器变量

     

    (2)random_shuffle(test.begin(),test.end());随机排列test矢量中的所有元素

    (3)random_shuffle(test.begin(),test.end());排序

     

    3、算法#include<algothrim>

    sort()升序排序

    next_pernutation()转换为下一排列方式,如果成功返回true,已处于最后,返回false

     

    例:string letter=”wed”;

           sort(letter.begin(),letter.end()); //则letter变为wed,对此题不变

           while(next_pernutation(letter.begin(),letter.end())

                         cout<<letter<<endl;

           则依次输出dew,dwe,edw,ewd,wde,wed //会去掉重复的

  • 相关阅读:
    electrica writeup
    C++ Tips and Tricks
    net-force.nl/steganography writeup
    3*n/2
    C++ 关键字浅谈
    MindMaster激活教程
    gitignre
    python pil 安装
    ubuntu 阿里云安全配置
    阿里云 centos 环境配置与 django 部署
  • 原文地址:https://www.cnblogs.com/yangtianxing/p/2435025.html
Copyright © 2011-2022 走看看