问:对象有多大?

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

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

有些编译器在内存中对齐变量,这导致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关键字很不错,因为这杨,如果我们不小心在这个函数中修改了成员变量的值,编译器会帮助我们发现愚蠢的错误。

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄