问:对象有多大?
答:对象占据的内存量取决于其成员变量的长度,类函数不占据为对象分配的内容。
有些编译器在内存中对齐变量,这导致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关键字很不错,因为这杨,如果我们不小心在这个函数中修改了成员变量的值,编译器会帮助我们发现愚蠢的错误。
原文:https://www.cnblogs.com/jianjipan/p/10747775.html