C++语言程序设计

现在让我们一步步地分析这个程序，理解为什么要用类来代替结构，以及为什么要这样来声明类。
我们将family结构改成了family类，类定义用class关键字。类的成员包括数据和操作（函数），它们有不同的访问权限。在关键字private的后面声明的husband、wife、son、daughter和ptr是私有的。ptr定义为指向family的指针，编译器自然会将family理解为类名，因为已经在类声明的开始处指定过了。
下面是关键字public后跟一个冒号，然后是成员函数声明。由于这些函数声明为public，它们可以在整个程序范围内的任何地方被访问。
在main中，对成员函数initialize作了调用。该函数有一个前缀Anderson，以及一个圆点（.），再回顾一下结构成员的引用方式。
struct family
{
char *husband;
char *wife;
char *son;
char *daughter;
};
family Anderson;
结构成员前面带有这种结构类型的变量名加上一个圆点运算符。
可以用同样的方法来引用类成员。initialize是类family的成员函数，Anderson则是该类的一个对象。所以，可用下面的方式调用函数　　initialize：
Anderson.initialize();
再来看看initialize函数的定义：
void family::initialize(void)
{
Anderson.ptr = &Anderson;
Anderson.ptr->husband = "John Anderson";
Anderson.ptr->wife = "Mary Anderson";
Anderson.ptr->son = "Joey Anderson";
Anderson.ptr->daughter = "Marla Anderson";
Anderson.output(Anderson.ptr);
}
函数名前面是类名加上作用域分隔符::。在我们的程序中很可能还有其它的函数以initialize为名，然而编译器却能理解这里只不过是类family的一个成员函数，因为在它的前面己经标明了类的名称，换句话说，该函数被类名所限定。让我们继续分析下列代码：
Anderson.ptr = &Anderson;
Anderson.ptr->husband = "John Anderson";
Anderson.ptr->wife = "Mary Anderson";
Anderson.ptr->son = "Joey Anderson";
Anderson.ptr->daughter = "Marla Anderson";
类成员ptr赋值为类对象Anderson内存地址，然后初始化其余的成员。最后，调用成员函数output。
从上面的对比讲述可以看出，传统的struct编程使得数据和操作分开，这是造成上述output( )输出错误的根本原因。而类和对象的概念，将数据和在此数据上执行的操作封装在一起，使得Anderson的output( )操作只能输出Anderson家庭的数据信息，而不再会产生输出另外一个家庭（比如Davis家庭）信息的错误。