6.3 结构(3)
3.开始定义main()函数并创建一个book类型的变量。
- int main() {
- book book1;
在定义了book结构之后,就可以创建一个book类型的变量了,就像我们对待任何其他变量那样。
4.提示用户输入图书的书名并把它存入这个结构。
- std::cout << "Enter the book's title:\n";
在绝大多数场合,结构均可以像任何其他变量那样使用。在这里,我们读入了一本书的书名(如图6-18所示),并把它保存到book结构的title成员里。
|
图6-18 提示用户输入一本图书的书 名并把它存入book结构 |
5.重复步骤4,依次读入图书的作者和出版日期。- std::cout << "Enter the book's author:\n";
- std::getline(std::cin, book1.author);
- std::cout << "Enter the book's publication year: ";
- std::cin >> book1.year;
每项用户输入都有它们各自的提示消息(如图6-19所示)。因为year是一个整数而不是一个字符串,所以可以利用std::cin来读入它。有关如何读取用户输入的详细讨论见第4章。
|
图6-19 将存放在book结构里 的其他信息也来自用户 |
6.把用户输入的信息回显给用户。- std::cout << "\nThe following information has been received..."
- << "\nTitle: " << book1.title
- << "\nAuthor: " << book1.author
- << "\nYear: " << book1.year << "\n\n";
在把所有的输入信息都保存到book结构里以后,我们将把它们回显给用户进行确认。请注意,这里使用了structureVariableName.structureMemberName语法来访问该结构的各个成员。
7.完成main()函数。
- std::cin.ignore(100, '\n');
- std::cout << "Press Enter or Return to continue.\n";
- std::cin.get();
- return 0;
- }
8.把这个文件保存为books.cpp,然后编译并运行这个程序(如图6-20所示)。
|
图6-20 在得到所有输入之后,这个示例程 序将把图书信息回显给用户进行确认 |
"提示
要想理解"对象"这个概念,必须先熟悉"结构"概念并掌握在程序里使用结构的办法。结构是一种包含多个子变量的变量定义。类(class)是一种包含子变量和函数(也叫做方法)的变量定义。
如果在结构里使用了string类型,有些编译器会发出警告消息。
在C语言里,必须使用如下所示的更正规的语法才能创建一个structureName类型的变量,C++(www.cppentry.com)的要求没有这么严格。
- struct structureName myVar;
C++(www.cppentry.com)允许程序员在定义一个结构之后立刻创建一些该类型的变量,如下所示:
- struct person {
- unsigned short age;
- char gender;
- } me, you;
同样,程序员还可以同时声明并初始化结构变量,如下所示:
- struct person {
- unsigned short age;
- char gender;
- } me = { 40, 'M'};
还可以创建一个以结构为元素的数组:
- person family[5];
如果想指向某结构数组中的特定元素的特定成员,需要依次写出该结构数组的名字、它的下标、一个句点(.)和这个成员的名字:
- family[3].age = 4;
- family[2].gender = 'F';
联合和其他复杂类型
在C++(www.cppentry.com)里还有许多其他的类型是我们还没有提到的。除对象以外,我们已经介绍了C++(www.cppentry.com)中最重要的数据类型,对象将在下一章讲述。到目前为止,你已经见过整数、实数、字符、字符串、数组、指针和结构。我们将在第13章介绍一种远优于数组的vector(向量)类型。现在,我们想简要地介绍另一种类型:联合(union)。
联合与结构有很多相似之处。联合也可以容纳多种不同类型的值,但它每次只能存储这些值中的某一个。比如,如果要定义一个变量来存放某种密码--它可以是你母亲的闺名、你身份证的最后4位数字或是你养的宠物的名字,联合将是一个不错的选择:
- union id {
- std::string maidenName;
- unsigned short ssn;
- std::string pet;
- };
在定义了这个联合之后,就可以像下面这样创建一个该类型的变量了:
- id michael;
接下来,可以像对结构成员进行赋值那样对联合里的成员进行赋值,使用同样的句点语法:
- michael.maidenName = "Colbert";
这条语句将把值Colbert存入michael联合的maidenName成员里。如果再执行下面这条语句:
- michael.pet = "Trixie";
这个联合将把新值Trixie存入michael联合的pet成员,并丢弃maidenName成员里的值--不再保存刚才的Colbert。
【责任编辑:
云霞 TEL:(010)68476606】