1.类的声明和定义

  1. 类的声明和定义。

    类声明的格式如下:

    class className
    {
    private://private 是类对象的默认访问控制,因此,可以省略
    data member delarations//类的私有数据成员名中使用m_开头是个不错的习惯
    public:
    member function prototypes
    }

    定义成员函数时,使用作用域解析符来标识其所属的类:

    className::functionName()是函数的限定名(qualified name); 而functionName()是非限定名。

  2. 结构和类的区别。

    结构的默认访问类型是public,而类为private,C++程序员通常使用类来实现类型描述,而把结构限制为只表示纯粹的数据对象或没有私有部分的类。

  3. 内联方法

    在类声明中定义方法:

    根据改写,这种写法等同于用原型替换方法定义,然后在类声明的后面将定义改写为内联函数。

    /*头文件中*/
    class Stock
    {
    private:
    ...
    void set_tot(){...}//定位位于声明中的写法
    public:
    ...
    }

    内联函数的特殊性要求在每个使用它们的文件中都对其进行定义。最简便的方法就是把内联定义放在定义类的头文件中:

    /*头文件中*/
    class Stock
    {
    private:
    ...
    void set_tot();//声明和定义分开的写法
    public:
    ...
    } inline void Stock::set_tot()
    {
    ...
    }
     

2.构造函数和析构函数

  1. 声明和定义构造函数

    class Stock
    {
    ...
    public:
    Stock(const char * co, int n = ; double pr = 0.0);//构造函数没有声明类型;没有返回类型。原型位于声明的公有部分。
    }
  2. 使用构造函数
    Stock garment ("Furry Mason", , );
    //与下面的等价
    Stock garment = Stock("Furry Mason", , );
  3. 默认构造函数

    如果定义了构造函数,编译器就不会提供默认构造函数。

    如果要创建对象而不显示初始化,就必需提供默认构造函数。给已有构造函数全部提供默认值 或 提供没有参数的构造函数。

  4. 析构函数

    像构造函数一样,析构函数也可以没有返回值和声明类型。与构造函数不同的是,析构函数没有参数。如果没提供析构函数,编译器会隐式声明一个析构函数。

    用new创建的对象在delete时会自动调用析构函数。

    Stock ~Stock()
    {
    ...
    }
  5. 编译器初始化类对象有可能使用以下两种方法中的一种:
    Stock stock2 = Stock("Boffo Objects", , 2.0);

    1.使其与Stock stock1("Boffo Objects", , 2.0)完全相同,直接创建对象并初始化为指定的值

    2.调用构造函数创建一个临时对象,然后将其复制到stock2中,并丢弃该临时对象。

  6. 给类对象赋值时,总分使用上面的第二种方法,用构造函数创建一个临时对象,然后将其复制到stock2中,再调用析构函数删除。

    Stock stock2;
    stock2 = Stock("Nifty Foods", , 50.0);
  7. 自动变量存储在堆栈中,因此最后创建的对象将最先被删除。

    int main()
    {
    Stock stock1;//
    Stock stock2;//最先被析构
    return ;
    }
  8. const成员函数。只要函数不修改调用对象时,应尽量把函数声明为const类型。

    //声明:
    void show()const;
    //定义:
    void Stock::show()const
    {
    ...
    }

    因为const类型的对象在调用非const成员函数时将拒绝执行。

    const Stock land = new Stock("Kludgehorn");
    land.show();//这里如果不是const函数,编译器将拒绝执行。
  9. 接受一个参数的构造函数允许使用赋值语法来将对象初始化为一个值。

    //构造函数原型
    Stock(int n); //那么可以这么初始化对象:
    Stock stock2 = ;

3.this指针

  1. 所有成员方法(包括构造函数和析构函数)都将this指针设置为 调用它的对象的地址,要引用整个对象,可以使用解除引用符号:*this。

4.对象数组

  1. 创建对象数组:

    Stock stocks[] = {
    Stock ("Naruto", , 43.0),
    Stock(),
    Stock("Saski")
    };

    初始化对象数组的方案是:首先使用默认构造函数创建数组元素,然后花括号中的构造函数将创建临时对象,然后将临时对象的内容复制到相应的数组元素中。因此,要创建类对象数组,则这个类必须有默认构造函数。

5.类作用域

  1. 使用关键字static可以在类中定义常量,该常量将与其它静态变量存储在一起,而不是存储在对象中。因此只有一个,它被所有类对象共享。

    class Stock
    {
    private:
    static const int Len = ;
    ...
    }
  2. 在类中定义不会创建类数据成员的枚举。
    class Stock
    {
    private:
    enum {Len = };
    ...
    }

    上面的Stock类中,所有对象中都不包含枚举。另外,Len只是一个符号名称,在作用域为整个类的代码中遇到它时,编译器将用30来替换它。

附:

    1. cout 和 cerr 的区别

      在Windows操作系统中,操作系统的重定向只影响cout而不影响cerr。如不特意指定,cout和cerr均指向屏幕。

      /*fileName=test.cpp*/
      void main()
      {
      cout << "cout";
      cerr << "cerr";
      }

      在控制台运行test.exe >D:\test.txt时,操作系统重定向输出流到D:\test.txt,此时cout会输出到该文件,而cerr依旧会输出到屏幕。

学习C++.Primer.Plus 10 对象和类的更多相关文章

  1. Java学习笔记(2)--- 对象和类入门,java包,this 和 super区别

    1.对象和类(Object and class): 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作. 面对对象编程是java非常重要的一部分,作者本身之前学过c ...

  2. [core java学习笔记][第四章对象与类]

    4.3 用户自定义类 4.3.1 类数组的声明 需要两次new Employee[]=staff=new Employedd[3]; staff[0]=new Employedd(参数列表); sta ...

  3. java学习笔记(3)——对象与类(日期)

    变量.类型.赋值.运算符等等: https://blog.csdn.net/common77zwq/article/details/81988676 1.概念: 面向对象程序设计OOP.类class. ...

  4. iOS学习10之OC类和对象

    本次是OC的第一节课,主要是学习和理解类与对象 1.面向对象 1> OOP(Object Oriented Programming)面向对象编程. 面向对象以事物为中心,完成某件事情都需要哪些事 ...

  5. C++ primer plus读书笔记——第10章 对象和类

    第10章 对象和类 1. 基本类型完成了三项工作: 决定数据对象需要的内存数量: 决定如何解释内存中的位: 决定可使用数据对象执行的操作或方法. 2. 不必在类声明中使用关键字private,因为这是 ...

  6. Python小白学习之路(五)—【类和对象】【列表】【列表相关功能】

    类和对象 (简单的了解一下这个概念,初步有个印象,这个概念很重要,后面会着重讲) 类:具有相同属性和方法的对象的集合: 对象:万物皆对象: 概念很抽象(每当我看不到概念的时候,我就会通过举例来理解) ...

  7. 并发编程学习笔记(10)----并发工具类CyclicBarrier、Semaphore和Exchanger类的使用和原理

    在jdk中,为并发编程提供了CyclicBarrier(栅栏),CountDownLatch(闭锁),Semaphore(信号量),Exchanger(数据交换)等工具类,我们在前面的学习中已经学习并 ...

  8. [19/10/14-星期一] Python中的对象和类

    一.面向对象 ## 什么是对象? - 对象是内存中专门用来存储数据的一块区域. - 对象中可以存放各种数据(比如:数字.布尔值.代码) - 对象由三部分组成: 1.对象的标识(id) 2.对象的类型( ...

  9. JavaSE 学习笔记02丨对象与类

    Chapter 4. 对象与类 4.1 面向对象程序设计概述 面向对象程序设计(简称OOP),是当今主流程序设计范型.面向对象的程序是由对象组成的,每个对象(来自于标准库或自定义的)包含对用户公开的特 ...

随机推荐

  1. Tomcat启动报错整理

    1.启动报 Connector attribute SSLCertificateFile must be defined when using SSL with APR conf\server.xml ...

  2. 瞄准SMART目标

    瞄准SMART目标 SMART代表具体的/可度量的/可实现的/相关的和时间可控的. 1.具体的  (一个目标任务应该是具体的/事物的具体化) 2.可度量的  (如何知道你何时完成?确贴的数字,度量具体 ...

  3. 留言列表模板HTML代码

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...

  4. 3D Banner(jQuery)

    1.这是用面向对象的思想去动态生成banner的简易流程,用到一个javaScript框架jQuer: 2.将代码黏贴成html文件,直接用浏览器打开即可: 3.layer属于弹窗提示类插件,可能需要 ...

  5. 简单的学习心得:网易云课堂Android开发第三章自定义控件

    这一章分三部分: (1)自定义控件:老师先简单讲解了一些细节,如为什么不用px,而要用dp,只因机型的屏幕分辨率不同,用px会导致差异太大.然后演示了制作自定义控件的步骤,先在xml文件中添加对应的自 ...

  6. Android内存泄漏

    Java是垃圾回收语言的一种,其优点是开发者无需特意管理内存分配,降低了应用由于局部故障(segmentation fault)导致崩溃,同时防止未释放的内存把堆栈(heap)挤爆的可能,所以写出来的 ...

  7. iOS 直播-获取音频(视频)数据

    iOS 直播-获取音频(视频)数据 // // ViewController.m // capture-test // // Created by caoxu on 16/6/3. // Copyri ...

  8. TortoiseSVN与VisualSVN Server搭建SVN版本控制系统

    本片主要介绍如何搭建SVN版本控制系统,主要使用工具: 1 客户端:TortoiseSVN (小乌龟) 2 服务端:VisualSVN Server 搭建出图形化管理,以及右键菜单版本控制管理的SVN ...

  9. 使用dubbo分布式服务框架发布服务及消费服务

    什么是DUBBO DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案. 准备工作 安装zookeeper ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服 ...

  10. #研发解决方案介绍#Tracing(鹰眼)

    郑昀 最后更新于2014/11/12 关键词:GoogleDapper.分布式跟踪.鹰眼.Tracing.HBase.HDFS. 本文档适用人员:研发   分布式系统为什么需要 Tracing?   ...