问:对象有多大?

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

有些编译器在内存中对齐变量,这导致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. java8时间使用小结

    //LocalDate代表一个IOS格式(yyyy-MM-dd)的日期 获取当前的日期: LocalDate localDate = LocalDate.now();//LocalDate: 表示没有 ...

  2. mangle和demangle

    转:https://www.cnblogs.com/robinex/p/7892795.html. mangle和demangle C/C++语言在编译以后,函数的名字会被编译器修改,改成编译器内部的 ...

  3. apache配置https和http的时候You don't have permission to access / on this server.

    You don't have permission to access / on this server. 是由于没有设置访问目录 今天配置httpd-ssl.conf的时候  发现这个问题 由于默认 ...

  4. pac (PAC(Proxy Auto Config) 是一个 Script;经由编写这个 Script,我们可以让系统判断在怎么样的情形下,要利用哪一台 Proxy 来进行联机。)

    PAC自动代理文件格式,教你如何写PAC文件 PAC文件格式 PAC文件是纯文本格式的,实际上就是JavaScript文件.Chrome/Chromium的扩展Switchy!的"Auto ...

  5. zk分布式锁-排它锁简单实现

    package Lock; import java.util.concurrent.CountDownLatch;import java.util.concurrent.TimeUnit;import ...

  6. Thymeleaf 标准表达式语法

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

  7. ansible 使用

    批量添加ssh免密 ansible mhc -m authorized_key -a "user=root key='{{ lookup('file','/root/.ssh/id_dsa. ...

  8. Hadoop Streaming:aggregate

    [Hadoop Streaming:aggregate] 1.实例1 测试文件test.txt mapper程序: 运行: $hadoop streaming -input /app/test.txt ...

  9. Python_05-文件操作

    目录: 1             文件操作 1.1          快速入门 1.1.1       用Python创建一个新文件 1.1.2       文件内容追加,从0到9的10个随机整数 ...

  10. Python3 min() 函数

    Python3 min() 函数  Python3 数字 描述 min() 方法返回给定参数的最小值,参数可以为序列. 语法 以下是 min() 方法的语法: min( x, y, z, .... ) ...