问:对象有多大?

答:对象占据的内存量取决于其成员变量的长度,类函数不占据为对象分配的内容。

有些编译器在内存中对齐变量,这导致2字节变量实际占用的内存多于2字节。

问:为何不应将所有成员数据声明为公有的?

答:通过将成员数据声明为私有的,可以让类的使用者能够使用这些数据,同时不必担心他们是如何存储和计算的。例如在三轮车类Tricylce有成员函数getspeed(),Tricycle类的使用者可请求获得三轮车的速度,而无需知道速度是存储在成员变量中还是动态计算得到的。公有数据类似于全局数据,任何对象的代码都可以访问它,因此如果这些数据被修改,通常会很难确定这些数据的修改是在哪里进行的。

const成员函数:

void displayPage() const;   //在函数括号后面添加关键字const 可以将成员函数声明成常量函数,其表明它不会修改任何类成员的值。

内联实现

可将常规函数声明为类联的,同样也可将成员函数声明成内联的,为此需要在返回类型前面指定关键字inline, 如下代码

inline int Tricycle::getSpeed()
{
return speed;
}

也可将函数定义放在类声明中,这样函数将自动变成内联的,如下例所示:

class Tricycle
{
public:
int getSpeed() const
{
return speed;
}
void setSpeed(int newSpeed);
}

将其他类用作成员数据的类

如一个矩形Rectangle类中我们可以使用点Point类。

class Point
{
public: // 一些需要的函数和成员变量
private:
//一些需要的函数和成员变量
};
class Rectangle
{
public:
//一些需要的函数和成员变量
void setUpperLeft(Point location);
void setUpperRight(Point location);
... private:
Point upperLeft;
Point upperRight;
Point lowerLeft;
Point lowerRight;
int top;
int left;
int bottom;
int right;
};

问:既然使用常量函数修改类会导致编译器错误,为何不删除关键字const?这样可以确保不会发生错误。

答:从逻辑上讲,某个函数不应该修改类,则使用const关键字很不错,因为这杨,如果我们不小心在这个函数中修改了成员变量的值,编译器会帮助我们发现愚蠢的错误。

C++的一些知识点摘抄(创建基本类 高级类)的更多相关文章

  1. C#高级知识点&(ABP框架理论学习高级篇)——白金版

    前言摘要 很早以前就有要写ABP高级系列教程的计划了,但是迟迟到现在这个高级理论系列才和大家见面.其实这篇博客很早就着手写了,只是楼主一直写写停停.看看下图,就知道这篇博客的生产日期了,谁知它的出厂日 ...

  2. 基于NSString处理文件的高级类

    基于NSString处理文件的高级类 我已经把处理文件的类简化到了变态的程度,如果你还有更简洁的方法,请告知我,谢谢! 使用详情: 源码: // // NSString+File.h // Maste ...

  3. Scala类型系统——高级类类型(higher-kinded types)

    高级类类型就是使用其他类型构造成为一个新的类型,因此也称为 类型构造器(type constructors).它的语法和高阶函数(higher-order functions)相似,高阶函数就是将其它 ...

  4. php面向对象的基础:创建OOP的类和字段

    类的创建 class Computer{ //类的字段(成员) //类的方法 } 对象的声明 $computer = new Computer(); new标识符是为了在内存中创建一个对象(实例),而 ...

  5. C#创建和初始化类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace C_编辑 ...

  6. JAVA类的创建: 创建JAVA的类 ,JAVA的字段,JAVA类的方法

    1. 创建Java的类 如果说Java的一切都是对象,那么类型就是决定了某一类对象的外观与行为.可是类型的关键字不是type,而是class,创建一个新的类型要用下面的代码: 1 2 3 class ...

  7. IDEA 创建包和类及基本操作

    创建包和类步骤如下: 1. 展开创建的工程,在源代码目录 src 上,鼠标右键,选择 new->package ,键入包名 com.itheima.demo ,点击确定. 2. 在创建好的包上, ...

  8. Java高级类特性(一)

    一.继承性 1)继承的使用:权限修饰符 class A extends B{}:2)子类:A 父类(基类 SuperClass):B3)子类继承父类后,父类中声明的属性.方法,子类都可以获取到明确:当 ...

  9. Python 创建和使用类

    python创建和使用类的方法如下 # class Dog(): # def __init__(self,name,age): # self.name=name # self.age=age # # ...

随机推荐

  1. Autofac log4net Integration Module

    log4net Integration Module While there is no specific assembly for log4net support, you can easily i ...

  2. 将mysql表数据批量导入redis zset结构中

    工作中有这样一个需求,要将用户的魅力值数据做排行,生成榜单展示前40名,每隔5分钟刷新一次榜单.这样的需求用redis的zset是很方便实现的.但是数据存在mysql的表中,有400多万条,怎么将其快 ...

  3. Thymeleaf 标准表达式语法

    变量表达式${ } 在控制器中往页面传递几个变量: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 @Controller public class IndexController ...

  4. MyBatis ehcache二级缓存

    ehcache二级缓存的开启步骤: 1.导入jar 2.在映射文件中指定用的哪个缓存 3.加一个配置文件,这个配置文件在ehcache jar包中就有 使增删改对二级缓存不刷新: 对一级缓存没有用的, ...

  5. 110. Balanced Binary Tree (Tree; DFS)

    Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...

  6. animate.css动画种类

    animate.css 一个非常好用的css动画库 Github地址 包括了一下多种动画 1. bounce 弹跳 2. flash 闪烁 3. pulse 放大,缩小 4. rubberBand 放 ...

  7. 通过HttpWebRequest实现模拟登陆

    1>通过HttpWebRequest模拟登陆 using System; using System.Collections.Generic; using System.Linq; using S ...

  8. [Selenium]Turn Page By Scroll Bar

    Description: Need to turn page by operating scroll bar and find out the element in the current page. ...

  9. java 内存 线程 类 vm分析工具

    JMeter.Jconsole.JVMStat

  10. pyhon 去除列表中重复元素

    Python set() 函数 描述 set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集.差集.并集等. 语法 set 语法: class set([iterabl ...