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和引用数据成员必须在成员初始化表中初始化,当构造函数开始初始化必须都已经发生。
    小提示:成员初始化表中初始化顺序是 右->左

    休息休息

  • 相关阅读:
    LeetCode-Letter Combinations of a Phone Number
    LeetCode-Sort Colors
    C++Memset误区
    LeetCode-Valid Palindrome
    LeetCode-Longest Consecutive Sequence
    C++豆知识索引
    C++ 哈希表
    LeetCode-Sum Root to Leaf Numbers
    LeetCode-Word LadderII
    LeetCode-Word Ladder
  • 原文地址:https://www.cnblogs.com/justin/p/2728.html
Copyright © 2011-2022 走看看