10.2.1 类型是什么
基本类型完成了下面的三项工作:
* 决定数据对象需要的内存数量;
* 决定如何解释内存中的位(long和float在内存中占用的位数相同,但是将它们转换为数值的方法不同);
* 决定可以使用数据对象执行的操作或方法。
在于内置类型来说,有关操作的信息被内置到编译器中。但在C++中定义用户自定义的类型时,必须自己提供这些信息。付出这些老动换来了根据实际需要定制新数据类型的强大功能和灵活性。
10.2.2 C++中的类
一般来说,类规范由两部分组成:
* 类声明:以数据成员的方式描述数据部分,以成员函数(被称为方法)的方式描述公有接口。
* 类方法定义:描述如何实现类成员函数。
简单地说:类声明提供了类的蓝图,而方法定义则提供了细节。
类声明样例:
程序清单10.1 stock00.h

// stock00.h -- Stock class interface
// version 00
#ifndef STOCK00_H_
#define STOCK00_H_ #include <string> class Stock // class declaration
{
private:
std::string company;
long shares;
double share_val;
double total_val;
void set_tot() { total_val = shares * share_val; }
public:
void acquire(const std::string & co, long n, double pr);
void buy(long num, double price);
void sell(long num, double price);
void update(double price);
void show();
}; // note semicolon at the end #endif

Stock是这个新类的类型名。该声明让我们能够声明Stock类型的变量——称为对象或实例。每个对象都表示一支股票。例如,下面的声明创建两个Stock对象,它们分别名为sally和solly:
Stock sally;
Stock solly;
这里,sally对象可以表示Sally持有的某公司股票。
1.访问控制
关键字private和public也是新的,它们描述了对类成员的访问控制。
使用类对象的程序都可以直接访问公有部分,单只能通过共有成员函数(或友元函数)来访问对象的私有成员。【友元函数——11章】
共有成员函数是程序和对象的私有成员之间的桥梁,提供了对象和程序之间的接口。
防止程序直接访问数据被称为数据隐藏。
C++还提供了第三个访问空置关键字protected。【protected关键字——13章】
类设计尽可能将共有接口与实现细节分开。共有接口表示设计的抽象组件。
将实现细节放在一起并将它们与抽象分开被称为封装。数据应藏(将数据放在类的私有部分中)是一种封装。
2.控制对成员的访问:公有还是私有
10.2.3 实现类成员函数
成员函数的定义与常规函数定义非常相似,它们有函数头和函数体,也可以有返回类型和参数。但是它们还有两个特殊的特征:
* 定义成源函数时,使用作用于解析运算符(::)来标识函数所属的类;
* 类方法可以访问类的private组件。
例如,update成员函数的函数头如下:
void Stock::update(double price)
例:类的实现
程序清单10.2 stock00.cpp

// stock00.cpp -- implementing the Stock class
// version 00
#include <iostream>
#include "stock00.h" void Stock::acquire(const std::string & co, long n, double pr)
{
company = co;
if (n < ) {
std::cout << "Number of shares can't be negative, "
<< company << " shares set to 0.\n";
shares = ;
}
else
shares = n;
share_val = pr;
set_tot();
} void Stock::buy(long num, double price)
{
if (num < )
{
std::cout << "Number of shares purchased can't be negative. "
<< "Transaction is aborted.\n";
}
else
{
shares += num;
share_val = price;
set_tot();
}
} void Stock::sell(long num, double price)
{
using std::cout;
if (num < )
{
cout << "Number of shares sold can't be negative. "
<< "Transaction is aborted.\n";
}
else if (num > shares)
{
cout << "You can't sell more than you have! "
<< "Transaction is aborted.\n";
}
else
{
shares -= num;
share_val = price;
set_tot();
}
} void Stock::update(double price)
{
share_val = price;
set_tot();
} void Stock::show()
{
std::cout << "Company: " << company
<< " Shares: " << shares << "\n"
<< " Share Price: $" << share_val
<< "Total Wroth: $" << total_val << "\n";
}

10.2.4 使用类
……
10.2.5 修改实现
……
10.2.6 小结
典型的类声明格式如下:
class className
{
private:
    data member declarations
public:
    member function prototypes
}

《C++ Primer Plus》10.2 抽象和类 学习笔记的更多相关文章

  1. 《C++ Primer Plus》第10章 对象和类 学习笔记

    面向对象编程强调的是程序如何表示数据.使用 OOP 方法解决编程问题的第一步是根据它与程序之间的接口来描述数据,从而指定如何使用数据.然后,设计一个类来实现该接口.一般来说,私有数据成员存储信息,公有 ...

  2. 《C++ Primer Plus》16.1 string类 学习笔记

    16.1.1 构造字符串程序清单16.1使用了string的7个构造函数.程序清单16.1 str1.cpp---------------------------------------------- ...

  3. System类学习笔记

    最近在学习源码的过程中发现:很多深层次的代码都用到了一个类System类,所以决定对System类一探究竟 本文先对System类进行了剖析,然后对System类做了总结 一.首先对该类的中的所有字段 ...

  4. zt C++ list 类学习笔记

    C++ list 类学习笔记 分类: C++ 2011-09-29 00:12 7819人阅读 评论(0) 收藏 举报 listc++iteratorvectorcconstructor 双向循环链表 ...

  5. GUI学习之五——QAbstractButton类学习笔记

    今天总结一下AbstractButton类的学习笔记. 一.描述 AbstractButton是对各种按键的抽象类他的继承关系是这样的 首先,QAbstractButton继承了QWidget类的各种 ...

  6. C++ Primer Plus 第四章 复合类型 学习笔记

    第四章 复合类型 1. 数组概述 1.1 数组的定义 数组(array)是一种数据格式,能够存储多个同类型的值.每个值都存储在一个独立的数组元素中,计算机在内存中依次存储数组的各个元素. 数组声明的三 ...

  7. 实验楼课程管理程序-深入学习《C++ Primer第五版》实验报告&学习笔记1

    本片博客为实验楼的训练营课程深入学习<C++ Primer第五版>的实验报告和学习笔记. 原课程地址为:https://www.shiyanlou.com/courses/405# 原文出 ...

  8. 《C++primer》v5 第7章 类 读书笔记 习题答案

    7.1.7.2.7.3 #include<iostream> #include<cstdio> #include<vector> #include<strin ...

  9. 《C++ Primer Plus》第13章 类继承 笔记

    类继承通过使用已有的类(基类)定义新的来(派生类),使得能够根据需要修改编程代码.共有继承建立is-a关系,这意味着派生类对象也应该是某种基类对象.作为is-a模型的一部分,派生类继承基类的数据称源和 ...

随机推荐

  1. iOS 更换键盘的return键的形式

    iOS 右下角的return键有很多形式,比如发送,完成换行等,在遵循代理之后调用 -(BOOL)textFieldShouldReturn:(UITextField *)textField{ ret ...

  2. Apache HttpComponents Custom protocol interceptors通过拦截器自定义压缩

    /* * ==================================================================== * Licensed to the Apache S ...

  3. kill 的常用信号

    kill命令用于终止指定的进程(terminate a process),是Unix/Linux下进程管理的常用命令.通常,我们在需要终止某个或某些进程时,先使用ps/pidof/pstree/top ...

  4. 轻量级ORM框架Dapper应用二:使用Dapper实现CURD操作

    在上一篇文章中,讲解了如何安装Dapper,这篇文章中将会讲解如何使用Dapper使用CURD操作. 例子中使用到的实体类定义如下: using System; using System.Collec ...

  5. 清除DataGridView显示的数据

    一.DataGridView未绑定数据时清空数据 this.dgv_PropDemo.DataSource = null 二.DataGridView绑定数据时清空数据 DataGridView绑定了 ...

  6. d3js网络拓扑关系特效可视化展现

    d3js拓扑关系特效可视化展现 在上一篇d3js文档http://www.cnblogs.com/juandx/p/3959900.html中讲了简单的d3js方法和效果,现在我做一个完整的演示,使用 ...

  7. 上手并过渡到PHP7(3)——Uniform Variable Syntax到底统一了什么

    PHP7 up and running 泊学原文链接泊学实操视频 Uniform Variable Syntax 在PHP 7提出Uniform Variable Syntax之前,我们大多数人可能都 ...

  8. node-webkit连接mysql

    一.安装node.js mysql驱动库 node-webkit里面没有mysql模块的,我们需要安装mysql模块.我们可以使用npm(Node package manager)进行安装.这里使用到 ...

  9. 关于Cocos2d-x中实例伸缩后的位置设置

    在有的时候觉得图片太大,会进行缩放,但是在设置位置的时候,用fire->getContentSize(),用的是它原来的大小,就会产生不能准确设置节点的现象 1.在设置伸缩比例的时候,记住比例值 ...

  10. 关于Cocos2d-x中监听物体不超越边界的解决方案

    写一个监听器 touchlistener->onTouchMoved = [this](Touch* pTouch, Event*) { auto delta = pTouch->getD ...