本章简单介绍了类的设计,但是包含了一些好的设计原则。

1一些通用的设计原则

(1)一个函数是否设计成成员函数的原则:如果这个函数改变对象的状态,那么这个函数就应该成为这个对象的成员。

(2)对于内置类型成员变量来说,构造函数中应该给他们提供值,否则,在当对象是局部变量时,内置成员变量的值是错误的(使用所占内存刚好含有的值)。

2 文件

头文件的代码中使用见过限定的名字。这样别人使用时就可以尽量少的包含必要的声明。

struct Student_info{

std::string name;

double midterm ,final;

std::vector<double> homework;

bfd::cookiemapping::afdaf adf;

}

3 成员函数

使用::调用同名的非成员函数。::放在名字前,表示我们要使用这个名字的一个版本,但是这个名字不是任何对象的成员。

double Student_info::grade() const{

return ::grade(midterm,final,homework);

}

const对象只能调用const成员函数。

一个函数是否设计成成员函数的原则:如果这个函数改变对象的状态,那么这个函数就应该成为这个对象的成员。

成员函数在类定义中定义时,默认为内联函数。

4 构造函数

不带任何参数的构造函数是默认构造函数

一个对象被创建时,发生的步骤:

(1)系统分配内存,保存这个对象

(2)根据构造函数的初始化列表,初始化这个对象

(3)执行构造函数的函数体

对于内置类型成员来说,构造函数中应该给他们提供值,否则,在当对象是局部变量时,内置成员变量的值是错误的(使用所占内存刚好含有的值)。

例如,

Student_info::Student_info():midterm(0),final(0){}

name和vector不用赋值,因为string和vector会调用自身的默认初始化函数

5 问题

(1)为什么成员变量设置为私有?对象的使用者的创建者不是一个,是什么样的场景?

设置成共有的 不利于类封装,会让客户端直接访问成员变量 这与c++的封装思想相悖。故对不允许客户直接操作的成员变量应设置为私有 并可提供 接口(成员函数)访问该变量

(3)课后习题未作

《accelerated c++》第九章---设计类的更多相关文章

  1. python 教程 第九章、 类与面向对象

    第九章. 类与面向对象 1)    类 基本类/超类/父类被导出类或子类继承. Inheritance继承 Inheritance is based on attribute lookup in Py ...

  2. .NET Core实战项目之CMS 第九章 设计篇-白话架构设计

    前面两篇文章给大家介绍了我们实战的CMS系统的数据库设计,源码也已经上传到服务器上了.今天我们就好聊聊架构设计,在开始之前先给大家分享一下这几天我一直在听的<从零开始学架构>里面关于架构设 ...

  3. C#入门经典第九章定义类-1

    1.C#中使用class关键字来定义类 class MyClass { //代码部分 } 定义了类之后,就可以在项目中能访问该定义的其他位置对该类进行实例化.默认情况下,类的声明是内部的,即只有当前项 ...

  4. 《Python编程从入门到实践》_第九章_类

    创建一个简单的类 根据Dog类创建的每个实列都将存储名字和年龄.我们赋予了每条小狗蹲下(sit())和打滚(roll_over())的能力: class Dog(): ""&quo ...

  5. File类与常用IO流第九章——转换流

    第九章.转换流 字节编码和字符集 编码:按照某种规则将字符以二进制存储到计算机中. 解码:将存储在计算机中的二进制数按照某种规则解析显示出来. 字符编码:Character Encoding ,就是一 ...

  6. 元类理解与元类编程 《Python3网络爬虫开发》中第九章代理的使用代码Crawler中代码的理解

    __new__与__init__的理解 __new__()方法是在创建实例之前被调用的,它的作用是创建一个实例,然后返回该实例对象,它是一个静态方法. __init__() 当实例被创建完成之后被调用 ...

  7. [Effective Java]第九章 异常

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  8. 第九章 C语言在嵌入式中的应用

    上章回顾 编码的规范和程序版式 版权管理和申明 头文件结构和作用 程序命名 程序注释和代码布局规范 assert断言函数的应用 与0或NULL值的比较 内存的分配和释放细节,避免内存泄露 常量特性 g ...

  9. Laxcus大数据管理系统2.0(11)- 第九章 容错

    第九章 容错 在当前,由于集群庞大的组织体系和复杂性,以及用户普遍要求低成本硬件,使得集群在运行过程中发生的错误概率,远远高于单一且性能稳定的小型机服务器,并且集群在运行过程中几乎是不允许停止的,这就 ...

随机推荐

  1. QT插件和服务培训

    下载地址:http://files.cnblogs.com/files/senior-engineer/%E6%8F%92%E4%BB%B6%E5%92%8C%E6%9C%8D%E5%8A%A1%E5 ...

  2. php 特定类型测试函数

    is_array() 检查变量是否是数组 is_double().is_float().is_real() 检查变量是否是浮点数 is_long().is_int().is_integer()检查变量 ...

  3. SQL查询表,表的所有字段名,SQL查询表,表的所有字段名

    SQL查询表,表的所有字段名 2011-07-29 10:21:43|  分类: SQLServer |  标签:表  sql  字段   |举报 |字号 订阅   SQL查询表,表的所有字段名 SQ ...

  4. Struts2中的验证框架

    通过注解的方式,可以让方法不用验证 @SkipValidation public String toRegView() { System.out.println("toRegView&quo ...

  5. Java Concurrent Topics

    To prevent Memory Consistency Errors(MCEs), it is good practice to specify synchronized class specif ...

  6. 图像操作相关 With Quartz 2D

    本文将为大家介绍常见的IOS图像处理操作包括以下四部分:旋转,缩放,裁剪以及像素和UIImage之间的转化,主要使用的知识是quartz2D.Quartz2D是CoreGraphics框架中的一个重要 ...

  7. 从零开始学习OpenGL ES之一 – 基本概念

    我曾写过一些文章介绍iPhone OpenGL ES编程,但大部分针对的是已经至少懂得一些3D编程知识的人.作为起点,请下载我的OpenGL Xcode项目模板,而不要使用Apple提供的模板.你可以 ...

  8. socket常见几种异常

    第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发生在服务器端进行newServerSocket(port)(po ...

  9. Nape "不动"刚体的碰撞交互

    "不动"刚体,这里指的是以下两类刚体: 1.刚体的allowMovement和allowRotation都设false的刚体 2.KINEMATIC类型的刚体 如下代码,测试发现输 ...

  10. IOS小工具以及精彩的博客

    IOS小工具以及精彩的博客 工具 Log Guru是一个收集Log的小工具, 可以在 Mac 上查看 iOS 设备的实时系统日志. 现在可以直接高亮显示在 FIR.im 上安装 app 失败的原因.后 ...