26-使用哪一个cin.get()
5.5.3 使用哪一个cin.get()
在第4章的程序清单4.5中,使用了这样的代码:
char name[ArSize];
...
cout << "Enter your name:\n";
cin.get(name, ArSize).get();
最后一行相当于两个连续的函数调用:
cin.get(name, ArSize);
cin.get();
cin.get()的一个版本接受两个参数:数组名(字符串(char类型)的地址)和ArSize(int类型的整数)。(记住,数组名是其第一个元素的地址,因此字符数组名的类型为char。)接下来,程序使用了不接受任何参数的cin.get()。而最近,我们这样使用过cin.get():
char ch;
cin.get(ch);
这里cin.get接受一个char参数。
看到这里,熟悉C语言的读者将再次感到兴奋或困惑。在C语言中,如果函数接受char指针和int参数,则使用该函数时,不能只传递一个参数(类型不同)。但在C++中,可以这样做,因为该语言支持被称为函数重载的OOP特性。函数重载允许创建多个同名函数,条件是它们的参数列表不同。例如,如果在C++中使用cin.get(name,ArSize),则编译器将找到使用char*和int作为参数的cin.get()版本;如果使用cin.get(ch),则编译器将使用接受一个char参数的版本;如果没有提供参数,则编译器将使用不接受任何参数的cin.get()版本。函数重载允许对多个相关的函数使用相同的名称,这些函数以不同方式或针对不同类型执行相同的基本任务。第8章将讨论该主题。另外,通过使用istream类中的get()示例,读者将逐渐习惯函数重载。为区分不同的函数版本,我们在引用它们时提供参数列表。因此,cin.get()指的是不接受任何参数的版本,而cin.get(char)则指的是接受一个参数的版本。