一、类的构造函数和析构函数

1、构造函数:
    1)试图将类成员名称用作构造函数的参数名是错误的。
    2)构造函数的参数表示的不是类成员, 而是赋给类成员的值。
    3)为了避免这种混乱,一种常见的做饭实在类成员名中使用m_前缀;
2、使用构造函数:
    1)显式的调用构造函数:
        Stock food = Stock("world Cabbage", 250, 2);
    2)隐式的调用构造函数:
        Stock food("world Cabbage", 250, 2);
    以上两种方法是等价的;

3)无法使用对象来调用构造函数,因为在构造函数构造出对象之前,对象是不存在的, 因此构造函数被用来创建对象,而不能通过对象来调用。

3、默认构造函数:
    1)默认构造函数是在未提供显示初始值时,用来创建对象的构造函数。    
        如:Stock fluffy_the_cat;
    2)构造函数没有参数,因为声明中不包含值。
    3)当且仅当没有定义任何构造函数时,编译器才会提供默认构造函数。

**4)为类定义了构造函数后,就必须为它提供默认构造函数。如果只提供了非默认构造函数,但没有提供默认构造函数,声明:Stock stock1,将出错;

**5)如果要创建对象,而不进行显式的初始化,则必须定义一个不接受任何参数的默认构造函数。

***6)定义默认构造函数的方法有两种:
        a:一种是给已有构造函数的已有参数提供默认值:Stock(const string & co = "Error", int m = 0; double pr = 0.0);
        b:另一种方式是通过函数重载来定义另一个构造函数——一个没有任何参数的构造函数:Stock();
     注:由于只能有一个构造函数,所以以上两种方法只能用一个;通常给所有的成员提供隐式初始值。
         so:在设计类时,通常应该提供对所用数据成员做隐式初始化的默认构造函数。
    7)隐式的调用默认构造函数时,不用圆括号;

4、析构函数:
    1)用来完成对象的清理工作;
    2)原型必须是:~classname();
    3)由于在类对象过期时,析构函数将被自动调用,所比必须有一个析构函数,如果程序员未定义析构函数,编译器将隐式的声明一个默认的析构函数。

5、C++11列表初始化:
    1)将列表初始化语法用于类对象的初始化:
        如:Stock hot_tip = {"Derivatives", 250, 4.4};
            Stock jock {"age "};    //以上两种与定义默认构造函数的方法a(3.6.a)匹配,对象jock中,后两个参数将未默认值。
            Stock temp {};        //与默认构造函数匹配

*6、const成员函数:
    1)为了保证函数不会修给调用其的对象,C++可以将const关键字放在函数括号的后面。如:void show() const;
    2)只要类方法不修改对象,就应该将其声明为const。

二、this指针:

*1、一般来说,所有的类方法都将this指针设置为调用其的对象的地址。
    *2、每个成员函数(包括构造函数和析构函数)都有一个this指针,this指针指向调用当前成员函数的对象。
    *3、如果要显式地引用整个对象时,可以使用表达式:*this,因为this是对象的地址,所以*this便是对象本身。

三、对象数组:

类是用户定义的类型,对象是类的实例。即对象是这种类的变量。每一个对象都存储自己的数据,而共享类方法。

1、对象数组可以同时创建多个对象。
    2、创建对象数组的一般方案是:首先使用默认构造函数创建数组元素,然后用花括号中的构造函数将创建临时对象,然后将创建的临时对象的内容复制到相应的元素中。
    3、按照以上方案时,必须有默认构造函数。

C++之类和对象——C++ primer plus学习(一)的更多相关文章

  1. C++ Primer Plus 学习之 类继承

    主要介绍了类的继承.虚函数.类继承的动态内存分配问题.继承与友元函数. 公有派生 基类的公有成员和私有成员都会成为派生类的一部分. 基类的私有成员只能通过基类的公有或者保护方法访问.但是,基类指针或引 ...

  2. ES6—数值(Number,Math对象)(复习+学习)

    ES6-数值(Number,Math对象)(复习+学习) 每天一学,今天要学习ES6的关于数的扩展以及复习,然后通过看书,查阅资料,以及webAPI来搞清楚遇到的,没见过的对象方法等等,下面为本次学习 ...

  3. 《C++ Primer》学习笔记:向vector对象添加元素蕴含的编程假定

    练习<C++ Primer>中的3.14节时,当敲入: #include <iostream> #include <string> using namespace ...

  4. 《C++ primer》学习笔记整理

    简介 本笔记目前已包含<C++ Primer>中的绝大部分内容,但尚有部分小节有所缺漏,如 19.1.19.2 节的笔记尚未整理,会持续更新. 本项目中的学习笔记是在学完一章内容后,对其要 ...

  5. C Primer Plus 学习笔记 -- 前六章

    记录自己学习C Primer Plus的学习笔记 第一章 C语言高效在于C语言通常是汇编语言才具有的微调控能力设计的一系列内部指令 C不是面向对象编程 编译器把源代码转化成中间代码,链接器把中间代码和 ...

  6. C Primer Plus 学习体会

    本月刚刚开始学习<C primer plus>,之前课上草草学过一遍,讲到指针就结束了.现在重新开始看感觉难度不大只是刚开始接触有些语言细节比较琐碎.学习这一周的体会如下: 诸多前辈推荐的 ...

  7. 应用程序Cache对象到高性能Memcached学习之路

    来源:微信公众号CodeL 以下是个人学习之路的简单分享,不足之处欢迎大神们批评指正! 在网站开发的初期,我们没有考虑更多的东西,也没有对缓存进行系统的设计,而是直接使用了应用程序缓存对象Cache, ...

  8. Javascript中String对象的的简单学习

    第十一课String对象介绍1:属性    在javascript中可以用单引号,或者双引号括起来的一个字符当作    一个字符对象的实例,所以可以在某个字符串后再加上.去调用String    对象 ...

  9. 类和对象:给大家介绍对象 - 零基础入门学习Python036

    类和对象:给大家介绍对象 让编程改变世界 Change the world by program 我们之前说过Python无处不对象,Python到处都是对象,然后你会发现很多童鞋其实并不知道对象是什 ...

随机推荐

  1. python字符串的encode和decode

    原文 decode的作用是将其他编码的字符串转换成unicode编码. str1.decode('gb2312') #表示将gb2312编码的字符串转换成unicode编码 encode的作用是将un ...

  2. ubuntu 下使用mysql

    第一步:安装mysql apt-get install mysql-server 第二步:设置允许远程登录 修改/etc/mysql/my.cnf(此文件为mysql的配置文件).将文件中的bindi ...

  3. setInterval()、clearInterval()、setTimeout()和clearTimeout()js计数器方法

    原文地址:http://caibaojian.com/setinterval-settimeout.html window.setInterval()方法 介绍 周期性地调用一个函数(function ...

  4. J2EE 基础知识积累

    1. 面向对象的思维: 1. 有哪些类 那些对象      2. 这些类中,每种类应该具有某种属性和方法      3. 考虑类与类之间应该具有什么样的关系 3. 1. 成员变量可以使用java语言中 ...

  5. 基于lucene的案例开发:查询语句创建PackQuery

    转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/44656141 http://www.llwjy.com/blogdetail/1 ...

  6. 转载: jQuery事件委托( bind() \ live() \ delegate()) [委托 和 绑定的故事]

    转载:http://blog.csdn.net/zc2087/article/details/7287429 随着DOM结构的复杂化和Ajax等动态脚本技术的运用,事件委托自然浮出了水面.jQuery ...

  7. WordPress插件制作教程(二): 编写一个简单的插件

    上一篇说到了如何创建一个插件,我想大家看了之后一定会有所收获,这一篇简单给大家写一个插件样例,让大家有一个基本的印象.这个插件的样例就是当你激活这个插件后会在你的每篇文章中插入一段自己定义好的内容,比 ...

  8. 机器学习之K近邻算法(KNN)

    机器学习之K近邻算法(KNN) 标签: python 算法 KNN 机械学习 苛求真理的欲望让我想要了解算法的本质,于是我开始了机械学习的算法之旅 from numpy import * import ...

  9. rlwrap 的安装使用

    rlwrap 的安装使用 在Windows操作系统上,当在DOS命令窗口中运行SQL*Plus的时候,可以使用向上,向下键来跳回之前已经执行过的SQL语句.你可以根据需要修改他们,然后按Enter键重 ...

  10. HDU 2457 DNA repair (AC自动机+DP)

    题意:给N个串,一个大串,要求在最小的改变代价下,得到一个不含上述n个串的大串. 思路:dp,f[i][j]代表大串中第i位,AC自动机上第j位的最小代价. #include<algorithm ...