zoukankan      html  css  js  c++  java
  • 类中的常量, const对象和成员函数

    常量
    起初读者可能认为合乎逻辑的选择是把一个const放在类里,但这不会产生预期的结果。在一个类里,const 恢复它在C中的一部分意思。
    它在每个类对象里分配存储并代表一个值,这个值一旦被初始化以后就不能改变。在一个类里使用const的意思是“在这个对象声明期内,这个是一个常量”。
    然而,对这个常量来讲,每个不同的对象可以含一个不同的值。

    把一个内部数据类型封装在一个类里以保证用构造函数初始化,是很用的。例如
    class interger
    {
    int i;
    public:
    interger(int I = 0);
    };
    integer::integer(int I):i(I){};
    现在,如果建立一个integer数组,他们都被自动初始化为零。
    interger[100]; 与for循环和memset()相比,这种初始化不必付出更多哦的开销。很多编译器可以很容易地把他优化成一个很快的过程。

    因为在类对象里进行了存储空间分配,编译器不能知道const的内容是什么,所以不能把它用作编译期间的常量。
    class bunch
    {
    enum {size = 100};
    int i[size];
    };
    使用enum是不会占用对象中的存储空间的,枚举常量在编译时被全部求值。

    const对象和成员函数
    const blob B(2);
    由于编译器强调对象为const,因此它必须保证对象的数据成员在对象的寿命期内不能被改变。可以很容易地保证公有数据不能被改变,但是怎么知道哪个成员函数会改变数据,又怎么知道哪个成员函数对与const对象是“安全”的呢
    如果声明一个成员函数为const函数,则等于告诉编译器可以为一个const对象调用这个函数。一个没有特别声明为const的成员函数被看成是将要修改对象中数据成员的函数,而且编译器不允许为一个const对象调用这个函数。
    必须在定义和声明中加入const.
    如果一个对象被定义成一个const对象,它就被放进只读存储器(ROM)中的一个候选,在头文件里,内联函数默认为内部连接--即它是static,并且只能在它被包含的编译单元看到。因此,只要他们不在相同的编译单元中声明,在内联函数和全局函数之间用同样的名字也不会在链接时产生冲突。
  • 相关阅读:
    lqb 基础练习 数列特征
    lqb 基础练习 查找整数 (遍历)
    lqb 基础练习 杨辉三角形
    lqb 基础练习 特殊的数字
    lqb 基础练习 回文数
    lqb 基础练习 特殊回文数
    lqb 基础练习 十进制转十六进制
    lqb 基础练习 十六进制转十进制
    lqb 基础练习 十六进制转八进制 (字符串进行进制转化)
    Git详细操作
  • 原文地址:https://www.cnblogs.com/xkfz007/p/2572439.html
Copyright © 2011-2022 走看看