C++语言程序设计

再来看一下这个main函数，就会发现它分成了两个部分。第一部分初始化指针ptr，使之指向结构变量Anderson，第二部分只是简单地输出每个成员的内容。下面我们修改这个main函数，建立两个函数来实现这个功能。

| 程序段10-1

family *ptr;
family *initialize(family *ptr)
{
ptr = &Anderson;
return ptr;
}
void output(family *ptr)
{
cout<<"husband is "<<ptr->husband<<endl
<<"wife is "<<ptr->wife<<endl
<<"son is "<<ptr->son<<endl
<<"daughter is "<<ptr->daughter<<endl;
}
void main(void)
{
ptr = initialize(ptr);
output(ptr);
}

现在假定有15个附加函数组成的1000行程序代码，要加到这一源始程序中，这些增加的函数由main来调用：

| 例10-3

#include <iostream.h>
struct family
{
char *husband;
char *wife;
char *son;
char *daughter;
};
family Anderson =
{
"John Anderson","Mary Anderson",
"Joey Anderson","Marla Anderson"
};
…
family *ptr;
//函数initialize的代码保持不变
family *initialize(family *ptr)
{
…
}
//增加的15个函数的函数原型放在这里
//函数output的代码保持不变
void output(family *ptr)
{
cout<<"husband is "<<ptr->husband<<endl
<<"wife is "<<ptr->wife<<endl
<<"son is "<<ptr->son<<endl
<<"daughter is "<<ptr->daughter<<endl;
}
void main(void)
{
…
}

假定该程序的输出结果如下：
husband is Mark Davis
wife is Jennifer Davis
son is Michael Davis
daughter is Maria Davis
这个输出结果是由于在程序的某个过程中指针ptr错误地指向结构类型faimly的其它的变量（也许是Davis），它的结构成员已初始化为Davis的成员了。这对于作为程序员来说意味着要在这1000行语句的程序中，查找究竟是在哪个函数中将指针ptr设为指向family类型的变量Davis（而不是Anderson）的内存地址。可是这样的事情通常会使程序员既伤脑筋又浪费时间，C++的类就能有效地解决这一问题。