zoukankan      html  css  js  c++  java
  • c++笔记--数组对象、vector对象和构造函数

    一、关于数组对象和vector对象
    Account *pact = new Account[10]
    1.在堆中分配包含10个Account类对象的数组;
    2.用Account类缺省构造函数初始化
    释放*pact不要用delete pact只是第一个类对象上调用了析构函数;应该使用delete [] pact;
    vector<Point> vec(5);//I
    初始化过程
    1.创建一个底层类型的临时对象,并在其上应用缺省构造函数;
    2.在vector的每个元素上依次应用拷贝构造函数,用临时类对象的拷贝初始化每一个类对象;
    3.删除临时类对象;

    I式初始化代价比较大,不推荐使用,作为一般设计原则,如下操作:
    vector<Point> cvs;
    int  cv_cnt = cal_control_vertices();
    //预留内存以便存放cv_cnt ponit对象
    //cvs仍然为空
    cvs.reserve(cv_cnt);
    //打开一个文件并迭代它;
    ifstream infile("spriteModel");
    istream_iterator<Point> cvfile(infile), eos;
    //现在插入元素
    copy(cvfile, eos, inserter(cvs, cvs.begin()));
    二、关于初始化表和构造函数内使用数据成员的赋值之间的区别,如有如下代码:
    inline Account::Accoutn(const char *name, double opening_bal)
     : _name(name), _balance(openingbal)
     {
      _acct_nmbr = get_unique_acct_nmbr();
     }

    inline Account::Accoutn(const char *name, double opening_bal)
     {
      _name = name;
      _balance = openingbal;
      _acct_nmbr = get_unique_acct_nmbr();
     }
    1.两种实现的结果是一样的;
    2.区别:成员初始化表只提供该类数据成员初始化,而构造函数体内对数据成员设置值是一个赋值操作;
    具体的说,我们可以把构造函数的执行过程分为两个阶段:隐式或显示初始化阶段和一般的计算阶段。计算阶段由函数体内的所有语句构成。
    在计算阶段,数据成员的设置被认为式赋值,而不是初始化;
    隐式或显示初始化决定与是否有成员初始化表,隐式初始化调用的顺序是先调用基类的函数,然后调用类成员的构造函数,以下代码:
    inlien Account::Account()
    {
     _name = "";
     _balance = 0.0;
     _acct_nmbr = 0;
    }
    在初始化阶段_name已经调用了它的缺省构着函数,所以无须在类初始化函数中重复赋值;
    对于内置非数据成员_balance和_acc_nmbr,两种初始化方法的结果很性能基本相同,但更受欢迎的是使用成员初始化表:
    inline Account::Account() : _balane(0.0), _acct_nmbr(0)
    {}
    两个例外,const和引用数据成员必须在成员初始化表中初始化,当构造函数开始初始化必须都已经发生。
    小提示:成员初始化表中初始化顺序是 右->左

    休息休息

  • 相关阅读:
    Java Native Method
    SQL语句优化
    Ibatis的环境搭建以及遇到的问题解决
    Java 构建器
    SpringMVC自定义视图 Excel视图和PDF视图
    java 枚举的常见使用方法
    mysql 根据某些字段之和排序
    MFC The Screen Flickers When The Image Zoomed
    How To Debug Qmake Pro File
    Gcc And MakeFile Level1
  • 原文地址:https://www.cnblogs.com/justin/p/2728.html
Copyright © 2011-2022 走看看