Source

PensarEnC++ / V1-Prefacio.xml

The branch 'PensarEnC++' does not exist.
Full commit
   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 217
 218
 219
 220
 221
 222
 223
 224
 225
 226
 227
 228
 229
 230
 231
 232
 233
 234
 235
 236
 237
 238
 239
 240
 241
 242
 243
 244
 245
 246
 247
 248
 249
 250
 251
 252
 253
 254
 255
 256
 257
 258
 259
 260
 261
 262
 263
 264
 265
 266
 267
 268
 269
 270
 271
 272
 273
 274
 275
 276
 277
 278
 279
 280
 281
 282
 283
 284
 285
 286
 287
 288
 289
 290
 291
 292
 293
 294
 295
 296
 297
 298
 299
 300
 301
 302
 303
 304
 305
 306
 307
 308
 309
 310
 311
 312
 313
 314
 315
 316
 317
 318
 319
 320
 321
 322
 323
 324
 325
 326
 327
 328
 329
 330
 331
 332
 333
 334
 335
 336
 337
 338
 339
 340
 341
 342
 343
 344
 345
 346
 347
 348
 349
 350
 351
 352
 353
 354
 355
 356
 357
 358
 359
 360
 361
 362
 363
 364
 365
 366
 367
 368
 369
 370
 371
 372
 373
 374
 375
 376
 377
 378
 379
 380
 381
 382
 383
 384
 385
 386
 387
 388
 389
 390
 391
 392
 393
 394
 395
 396
 397
 398
 399
 400
 401
 402
 403
 404
 405
 406
 407
 408
 409
 410
 411
 412
 413
 414
 415
 416
 417
 418
 419
 420
 421
 422
 423
 424
 425
 426
 427
 428
 429
 430
 431
 432
 433
 434
 435
 436
 437
 438
 439
 440
 441
 442
 443
 444
 445
 446
 447
 448
 449
 450
 451
 452
 453
 454
 455
 456
 457
 458
 459
 460
 461
 462
 463
 464
 465
 466
 467
 468
 469
 470
 471
 472
 473
 474
 475
 476
 477
 478
 479
 480
 481
 482
 483
 484
 485
 486
 487
 488
 489
 490
 491
 492
 493
 494
 495
 496
 497
 498
 499
 500
 501
 502
 503
 504
 505
 506
 507
 508
 509
 510
 511
 512
 513
 514
 515
 516
 517
 518
 519
 520
 521
 522
 523
 524
 525
 526
 527
 528
 529
 530
 531
 532
 533
 534
 535
 536
 537
 538
 539
 540
 541
 542
 543
 544
 545
 546
 547
 548
 549
 550
 551
 552
 553
 554
 555
 556
 557
 558
 559
 560
 561
 562
 563
 564
 565
 566
 567
 568
 569
 570
 571
 572
 573
 574
 575
 576
 577
 578
 579
 580
 581
 582
 583
 584
 585
 586
 587
 588
 589
 590
 591
 592
 593
 594
 595
 596
 597
 598
 599
 600
 601
 602
 603
 604
 605
 606
 607
 608
 609
 610
 611
 612
 613
 614
 615
 616
 617
 618
 619
 620
 621
 622
 623
 624
 625
 626
 627
 628
 629
 630
 631
 632
 633
 634
 635
 636
 637
 638
 639
 640
 641
 642
 643
 644
 645
 646
 647
 648
 649
 650
 651
 652
 653
 654
 655
 656
 657
 658
 659
 660
 661
 662
 663
 664
 665
 666
 667
 668
 669
 670
 671
 672
 673
 674
 675
 676
 677
 678
 679
 680
 681
 682
 683
 684
 685
 686
 687
 688
 689
 690
 691
 692
 693
 694
 695
 696
 697
 698
 699
 700
 701
 702
 703
 704
 705
 706
 707
 708
 709
 710
 711
 712
 713
 714
 715
 716
 717
 718
 719
 720
 721
 722
 723
 724
 725
 726
 727
 728
 729
 730
 731
 732
 733
 734
 735
 736
 737
 738
 739
 740
 741
 742
 743
 744
 745
 746
 747
 748
 749
 750
 751
 752
 753
 754
 755
 756
 757
 758
 759
 760
 761
 762
 763
 764
 765
 766
 767
 768
 769
 770
 771
 772
 773
 774
 775
 776
 777
 778
 779
 780
 781
 782
 783
 784
 785
 786
 787
 788
 789
 790
 791
 792
 793
 794
 795
 796
 797
 798
 799
 800
 801
 802
 803
 804
 805
 806
 807
 808
 809
 810
 811
 812
 813
 814
 815
 816
 817
 818
 819
 820
 821
 822
 823
 824
 825
 826
 827
 828
 829
 830
 831
 832
 833
 834
 835
 836
 837
 838
 839
 840
 841
 842
 843
 844
 845
 846
 847
 848
 849
 850
 851
 852
 853
 854
 855
 856
 857
 858
 859
 860
 861
 862
 863
 864
 865
 866
 867
 868
 869
 870
 871
 872
 873
 874
 875
 876
 877
 878
 879
 880
 881
 882
 883
 884
 885
 886
 887
 888
 889
 890
 891
 892
 893
 894
 895
 896
 897
 898
 899
 900
 901
 902
 903
 904
 905
 906
 907
 908
 909
 910
 911
 912
 913
 914
 915
 916
 917
 918
 919
 920
 921
 922
 923
 924
 925
 926
 927
 928
 929
 930
 931
 932
 933
 934
 935
 936
 937
 938
 939
 940
 941
 942
 943
 944
 945
 946
 947
 948
 949
 950
 951
 952
 953
 954
 955
 956
 957
 958
 959
 960
 961
 962
 963
 964
 965
 966
 967
 968
 969
 970
 971
 972
 973
 974
 975
 976
 977
 978
 979
 980
 981
 982
 983
 984
 985
 986
 987
 988
 989
 990
 991
 992
 993
 994
 995
 996
 997
 998
 999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
<?xml  version="1.0" encoding="utf-8"?>
<!-- -*- sgml -*- -->
<!--
  Editor:              Emacs 21/PSGML
  Traducción original: Miguel Ángel García
  Formateado DocBook:  Miguel Ángel García
-->

<!DOCTYPE preface PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
                 "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">

<preface
  xmlns:xi="http://www.w3.org/2001/XInclude"
  id="prefacio">

  <title>Prefacio</title>

  <highlights>
    <!--
    Like any human language, C++ provides a way to express concepts. If
    successful, this medium of expression will be significantly easier
    and more flexible than the alternatives as problems grow larger and
    more complex.
    -->

    <para>
      Como cualquier lenguaje humano, C++ proporciona métodos para
      expresar conceptos. Si se utiliza de forma correcta, este medio de
      expresión será significativamente más sencillo y flexible que
      otras alternativas cuando los problemas aumentan en tamaño y
      complejidad.
    </para>
  </highlights>


  <!--
  You can't just look at C++ as a collection of features; some of the
  features make no sense in isolation. You can only use the sum of the
  parts if you are thinking about design, not simply coding. And to
  understand C++ this way, you must understand the problems with C and
  with programming in general. This book discusses programming problems,
  why they are problems, and the approach C++ has taken to solve such
  problems. Thus, the set of features I explain in each chapter will be
  based on the way that I see a particular type of problem being solved
  with the language. In this way I hope to move you, a little at a time,
  from understanding C to the point where the C++ mindset becomes your
  native tongue.
  -->
  <para>
    No se puede ver C++ sólo como un conjunto de características, ya
    que algunas de esas características no tienen sentido por
    separado. Sólo se puede utilizar la suma de las partes si se está
    pensando en el diseño, no sólo en el código. Y para entender C++ de
    esta forma, se deben comprender los problemas existentes con C y con
    la programación en general. Este libro trata los problemas de
    programación, porque son problemas, y el enfoque que tiene C++ para
    solucionarlos.  Además, el conjunto de características que explico
    en cada capítulo se basará en la forma en que yo veo un tipo de
    problema en particular y cómo resolverlo con el lenguaje. De esta
    forma espero llevar al lector, poco a poco, de entender C al punto
    en el que C++ se convierta en su propia lengua.
  </para>


  <!--
  Throughout, I'll be taking the attitude that you want to build a model
  in your head that allows you to understand the language all the way
  down to the bare metal; if you encounter a puzzle, you'll be able to
  feed it to your model and deduce the answer. I will try to convey to
  you the insights that have rearranged my brain to make me start
  "thinking in C++."
  -->
  <para>
    Durante todo el libro, mi actitud será pensar que el lector desea
    construir en su cabeza un modelo que le permita comprender el
    lenguaje bajando hasta sus raíces; si se tropieza con un
    rompecabezas, será capaz de compararlo con su modelo mental y
    deducir la respuesta. Trataré de comunicarle las percepciones que
    han reorientado mi cerebro para <quote>Pensar en C++</quote>.
  </para>

  <sect1>
    <!-- What's new in the second edition -->
    <title>Material nuevo en la segunda edición</title>

    <!--
    This book is a thorough rewrite of the first edition to reflect
    all of the changes introduced in C++ by the finalization of the C++
    Standard, and also to reflect what I've learned since writing the
    first edition.  The entire text present in the first edition has
    been examined and rewritten, sometimes removing old examples, often
    changing existing examples and adding new ones, and adding many new
    exercises.  Significant rearrangement and re-ordering of the
    material took place to reflect the availability of better tools and
    my improved understanding of how people learn C++. A new chapter was
    added which is a rapid introduction to the C concepts and basic C++
    features for those who don't have the C background to tackle the
    rest of the book.  The CD ROM bound into the back of the book
    contains a seminar that is an even gentler introduction to the C
    concepts necessary to understand C++ (or Java). It was created by
    Chuck Allison for my company (MindView, Inc.), and it's called
    "Thinking in C: Foundations for Java and C++." It introduces you to
    the aspects of C that are necessary for you to move on to C++ or
    Java, leaving out the nasty bits that C programmers must deal with
    on a day-to-day basis but that the C++ and Java languages steer you
    away from (or even eliminate, in the case of Java).
    -->
    <para>
      Este libro es una minuciosa reescritura de la primera edición para
      reflejar todos los cambios que han aparecido en C++ tras la
      finalización del estándar que lo rige, y también para reflejar lo
      que he aprendido desde que escribí la primera edición. He
      examinado y reescrito el texto completo, en ocasiones quitando
      viejos ejemplos, a veces cambiándolos, y también añadiendo muchos
      ejercicios nuevos. La reorganización y reordenación del material
      tuvo lugar para reflejar la disponibilidad de mejores
      herramientas, así como mi mejor comprensión de cómo la gente
      aprende C++. He añadido un nuevo capítulo, como introducción al
      resto del libro, una introducción rápida a los conceptos de C y a
      las características básicas de C++ para aquellos que no tienen
      experiencia en C. El <acronym>CD-ROM</acronym> incluido al final
      del libro en la edición en papel contiene un seminario: una
      introducción aún más ligera a los conceptos de C necesarios para
      comprender C++ (o Java). Chuck Allison lo escribió para mi empresa
      (MindView, Inc.), y se llama <quote>Pensar en C: conceptos básicos
      de Java y C++</quote>. Presenta los aspectos de C que necesita
      conocer para poder cambiar a C++ o Java, abandonando los
      desagradables bits de bajo nivel con los que los programadores de
      C tratan a diario, pero que lenguajes como C++ y Java mantienen
      lejos (o incluso eliminan, en el caso de Java).
    </para>


    <!--
    So the short answer to the question "what's different in the 2^nd
    edition?" is: what isn't brand new has been rewritten, sometimes to
    the point where you wouldn't recognize the original examples and
    material.
    -->
    <para>
      Así que la respuesta corta a la pregunta <quote>¿Qué es diferente
      en la segunda edición?</quote> sería que aquello que no es
      completamente nuevo se ha reescrito, a veces hasta el punto en el
      que no podría reconocer los ejemplos y el material original de la
      primera edición.
    </para>

    <sect2>
      <!-- What's in Volume 2 of this book -->
      <title>¿Qué contiene el volumen 2 de este libro?</title>

      <!-- The completion of the C++ Standard also added a number of
      important new libraries, such as string and the containers and
      algorithms in the Standard C++ Library, as well as new complexity
      in templates. These and other more advanced topics have been
      relegated to Volume 2 of this book, including issues such as
      multiple inheritance, exception handling, design patterns, and
      topics about building and debugging stable systems.
      -->
      <para>
	Con la conclusión del estándar de C++ también se añadieron
	algunas importantes bibliotecas nuevas, tales como string y
	los contenedores, y algoritmos de la Librería Estándar C++, y
	también se ha añadido complejidad a las plantillas. Éstos y
	otros temas más avanzados se han relegado al volumen 2 de este
	libro, incluyendo asuntos como la herencia múltiple, el manejo
	de excepciones, patrones de diseño, y material sobre la
	creación y depuración de sistemas estables.
      </para>
    </sect2>

    <sect2>
      <!-- How to get Volume 2 -->
      <title>Cómo obtener el volumen 2</title>

      <!-- Just like the book you currently hold, Thinking in C++,
      Volume 2 is downloadable in its entirety from my Web site at
      www.BruceEckel.com.  You can find information on the Web site
      about the expected print date of Volume 2.  -->
      <para>
	Del mismo modo que el libro que lee en estos momentos,
	<citetitle>Pensar en C++, Volumen 2</citetitle> se puede
	descargar desde mi sitio web <ulink
	url="http://www.BruceEckel.com">www.BruceEckel.com</ulink>. Puede
	encontrar información en el sitio web sobre la fecha prevista
	para la impresión del Volumen 2.
      </para>

      <!-- The Web site also contains the source code for both of the
      books, along with updates and information about other
      seminars-on-CD ROM that MindView, Inc. offers, public seminars,
      and in-house training, consulting, mentoring, and walkthroughs.
      -->
      <para>
	El sitio web también contiene el código fuente de los listados
	para ambos libros, junto con actualizaciones e información
	sobre otros seminarios en CD-ROM que ofrece MidView Inc.,
	seminarios públicos y formación interna, consultas, soporte y
	asistentes paso a paso.
      </para>
    </sect2>
  </sect1>

  <sect1>
 <!-- Prerequisites -->
    <title>Requisitos</title>

    <!-- In the first edition of this book, I decided to assume that
    someone else had taught you C and that you have at least a reading
    level of comfort with it. My primary focus was on simplifying what I
    found difficult: the C++ language. In this edition I have added a
    chapter that is a rapid introduction to C, along with the Thinking
    in C seminar-on-CD, but I am still assuming that you already have
    some kind of programming experience. In addition, just as you learn
    many new words intuitively by seeing them in context in a novel,
    it's possible to learn a great deal about C from the context in
    which it is used in the rest of the book.  -->

    <para>
      En la primera edición de este libro, decidí suponer que otra
      persona ya le había enseñado C y que el lector tenía, al menos,
      un nivel aceptable de lectura del mismo.  Mi primera intención
      fue hablar de lo que me resultó difícil: el lenguaje C++. En
      esta edición he añadido un capítulo como introducción rápida a
      C, acompañada del seminario en-CD
      <citetitle>Thinking in C</citetitle>, pero sigo asumiendo que el
      lector tiene algún tipo de experiencia en programación. Además,
      del mismo modo que se aprenden muchas palabras nuevas
      intuitivamente, viéndolas en el contexto de una novela, es
      posible aprender mucho sobre C por el contexto en el que se
      utiliza en el resto del libro.
    </para>
  </sect1>

  <sect1>
  <!-- Learning C++ -->
    <title>Aprender C++</title>

    <!-- I clawed my way into C++ from exactly the same position I
    expect many of the readers of this book are in: as a programmer with
    a very no-nonsense, nuts-and-bolts attitude about
    programming. Worse, my background and experience was in
    hardware-level embedded programming, in which C has often been
    considered a high-level language and an inefficient overkill for
    FIXME:pushing bits around. I discovered later that I wasn't even a
    very good C programmer, hiding my ignorance of structures, malloc( )
    and free( ), setjmp( ) and longjmp( ), and other "sophisticated"
    concepts, scuttling away in shame when the subjects came up in
    conversation instead of reaching out for new knowledge.  -->
    <para>
      Yo me adentré en C++ exactamente desde la misma posición en la que
      espero que se encuentren muchos de los lectores de este libro:
      como un programador con una actitud muy sensata y con muchos
      vicios de programación. Peor aún, mi experiencia era sobre
      porgramación de sistemas empotrados a nivel hardware, en la que a
      veces se considera a C como un <emphasis>lenguaje de alto
      nivel</emphasis> y excesivamente ineficiente para ahorrar
      bits. Descubrí más tarde que nunca había sido un buen programador
      en C, camuflando así mi ignorancia sobre estructuras,
      <function>malloc()</function> y <function>free()</function>,
      <function>setjmp()</function> y <function>longjmp()</function>, y
      otros conceptos <emphasis>sofisticados</emphasis>, y muriéndome de
      vergüenza cuando estos términos entraban en una conversación, en
      lugar de investigar su utilidad.
    </para>


    <!--
    When I began my struggle to understand C++, the only decent book was
    Bjarne Stroustrup's self-professed "expert's guide,[1]" so I was
    left to simplify the basic concepts on my own. This resulted in my
    first C++ book,[2] which was essentially a brain dump of my
    experience. That was designed as a reader's guide to bring
    programmers into C and C++ at the same time. Both editions[3] of the
    book garnered enthusiastic response.
    -->

    <para>
      Cuando comencé mi lucha por aprender C++, el único libro decente
      era la auto-proclamada <emphasis>Guía de expertos</emphasis> de
      Bjarne Stroustrup
      <footnote>
	<para>
	  Bjarne Stroustrup, <citetitle>The C++ Programming
	  Language</citetitle>, Addison-Wesley, 1986 (first edition).
	</para>
      </footnote>
      así que simplifiqué los conceptos básicos por mí
      mismo. Esto se acabó convirtiendo en mi primer libro de C++
      <footnote>
	<para>
	  <citetitle>Using C++</citetitle>, Osborne/McGraw-Hill 1989.
	</para>
      </footnote>
      , que es esencialmente un reflejo de mi experiencia. Fue descrita
      como una guía de lectura para atraer a los programadores a C y C++
      al mismo tiempo. Ambas ediciones
      <footnote>
	<para>
	  <citetitle>Using C++ and C++ Inside &amp; Out</citetitle>,
	  Osborne/McGraw-Hill 1993.
	</para>
      </footnote>
      del libro consiguieron una respuesta entusiasta.
    </para>

    <!-- At about the same time that Using C++ came out, I began
    teaching the language in seminars and presentations. Teaching C++
    (and later, Java) became my profession; I've seen nodding heads,
    blank faces, and puzzled expressions in audiences all over the world
    since 1989. As I began giving in-house training to smaller groups of
    people, I discovered something during the exercises. Even those
    people who were smiling and nodding were confused about many
    issues. I found out, by creating and chairing the C++ and Java
    tracks at the Software Development Conference for many years, that I
    and other speakers tended to give the typical audience too many
    topics, too fast. So eventually, through both variety in the
    audience level and the way that I presented the material, I would
    end up losing some portion of the audience. Maybe it's asking too
    much, but because I am one of those people resistant to traditional
    lecturing (and for most people, I believe, such resistance results
    from boredom), I wanted to try to keep everyone up to speed.  -->
    <para>
      Más o menos al mismo tiempo que aparecía <citetitle>Using
      C++</citetitle>, comencé a enseñar el lenguaje en seminarios y
      presentaciones. Enseñar C++ (y más tarde, Java) se convirtió en mi
      profesión; llevo viendo cabezas asintiendo, caras pálidas, y
      expresiones de perplejidad en audiencias por todo el mundo desde
      1989. Cuando comencé a dar formación interna a grupos más
      pequeños, descubrí algo durante los ejercicios. Incluso aquella
      gente que estaba sonriendo y asintiendo se encontraba equivocada
      en muchos aspectos. Creando y dirigiendo las pruebas de C++ y Java
      durante muchos años en la Conferencia de Desarrollo de Software,
      descubrí que tanto otros oradores como yo tendíamos a tocar
      demasiados temas, y todo demasiado rápido. Así que, de vez en
      cuando, a pesar de la variedad del nivel de la audiencia e
      independientemente de la forma en que se presentara el material,
      terminaría perdiendo alguna parte de mi público. Quizá sea pedir
      demasiado, pero como soy una de esas personas que se resisten a
      una conferencia tradicional (y para la mayoría de las personas,
      creo, esta resistencia está causada por el aburrimiento), quise
      intentar mantener a cada uno a su velocidad.
    </para>


    <!-- For a time, I was creating a number of different presentations
    in fairly short order. Thus, I ended up learning by experiment and
    iteration (a technique that also works well in C++ program design).
    Eventually I developed a course using everything I had learned from
    my teaching experience. It tackles the learning problem in discrete,
    easy-to-digest steps and for a hands-on seminar (the ideal learning
    situation) there are exercises following each of the presentations.
    You can find out about my public seminars at www.BruceEckel.com, and
    you can also learn about the seminars that I've turned into CD ROMs.
    -->
    <para>
      Durante un tiempo, estuve haciendo presentaciones en orden
      secuencial.  De ese modo, terminé por aprender experimentando
      e iterando (una técnica que también funciona
      bien en el diseño de programas en C++). Al final, desarrollé un
      curso usando todo lo que había aprendido de mi experiencia en la
      enseñanza. Así, el aprendizaje se realiza en pequeños pasos,
      fáciles de digerir, y de cara a un seminario práctico (la
      situación ideal para el aprendizaje) hay ejercicios al final de
      cada presentación. Puede encontrar mis seminarios públicos en
      <ulink url="http://www.BruceEckel.com">www.BruceEckel.com</ulink>,
      y también puede aprender de los seminarios que he pasado a
      <acronym>CD-ROM</acronym>.
    </para>

    <!-- The first edition of this book developed over the course of two
    years, and the material in this book has been road-tested in many
    forms in many different seminars. The feedback that I've gotten from
    each seminar has helped me change and refocus the material until I
    feel it works well as a teaching medium. But it isn't just a seminar
    handout; I tried to pack as much information as I could within these
    pages, and structure it to draw you through onto the next
    subject. More than anything, the book is designed to serve the
    solitary reader who is struggling with a new programming language.
    -->
    <para>
      La primera edición de este libro se gestó a lo largo de dos
      años, y el material de este libro se ha usado de muchas formas y
      en muchos seminarios diferentes. Las reacciones que he percibido
      de cada seminario me han ayudado a cambiar y reorientar el
      material hasta que he comprobado que funciona bien como un medio
      de enseñanza. Pero no es sólo un manual para dar seminarios; he
      tratado de recopilar tanta información como he podido en estas
      páginas, intentando estructurarlas para atraer al lector hasta
      la siguiente materia. Más que nada, el libro está diseñado para
      servir al lector solitario que lucha con un lenguaje de
      programación nuevo.
    </para>
  </sect1>



  <sect1>
    <!-- Goals -->
    <title>Objetivos</title>

    <para>
      <!-- My goals in this book are to: -->
      Mis objetivos en este libro son:</para>

    <orderedlist>
      <listitem>
	<!--
	1. Present the material one simple step at a time, so the reader
	can easily digest each concept before moving on.
	-->
	<para>
	  Presentar el material paso a paso, de manera que el lector
	  pueda digerir cada concepto fácilmente antes de continuar.
	</para>
      </listitem>

      <listitem>
	<!--
	2. Use examples that are as simple and short as
	possible. This often prevents me from tackling "real world"
	problems, but I've found that beginners are usually happier when
	they can understand every detail of an example rather than being
	impressed by the scope of the problem it solves. Also, there's a
	severe limit to the amount of code that can be absorbed in a
	classroom situation. For this I sometimes receive criticism for
	using "toy examples," but I'm willing to accept that in favor of
	producing something pedagogically useful.  -->
	<para>
	  Usar ejemplos tan simples y cortos como sea posible. Esto a
	  veces me impide manejar problemas del <emphasis>mundo
	  real</emphasis>, pero he descubierto que los principiantes
	  normalmente quedan más contentos cuando pueden comprender cada
	  detalle de un ejemplo que siendo impresionados por el ámbito
	  del problema que soluciona. Además, hay un límite en la
	  cantidad de código que se puede asimilar en una clase. Por
	  ello, a veces recibo críticas por usar <emphasis>ejemplos de
	  juguete</emphasis>, pero tengo la buena voluntad de aceptarlas
	  en favor de producir algo pedagógicamente útil.
	</para>
      </listitem>

      <listitem>
	<!--
	3. Carefully sequence the presentation of features so that you
	aren't seeing something you haven't been exposed to. Of course,
	this isn't always possible; in those situations, a brief
	introductory description will be given.  -->
	<para>
	  La cuidadosa presentación secuencial de capacidades para
	  que no se vea algo que no ha sido explicado. De acuerdo,
	  esto no siempre es posible; en esos casos, se ofrece una
	  breve descripción introductoria.
	</para>
      </listitem>

      <listitem>
	<!--
	4. Give you what I think is important for you to understand
	about the language, rather than everything that I know. I
	believe there is an "information importance hierarchy," and
	there are some facts that 95 percent of programmers will never
	need to know and that would just confuse them and add to their
	perception of the complexity of the language. To take an example
	from C, if you memorize the operator precedence table (I never
	did), you can write clever code. But if you have to think about
	it, it will confuse the reader/maintainer of that code. So
	forget about precedence, and use parentheses when things aren't
	clear. This same attitude will be taken with some information in
	the C++ language, which I think is more important for compiler
	writers than for programmers.  -->
	<para>
	  Indicarle lo que creo que es importante para que se comprenda
	  el lenguaje, más que todo lo que sé. Creo que hay una
	  "jerarquía de la importancia de la información", y hay algunos
	  hechos que el 95 por ciento de los programadores nunca
	  necesitará saber y que sólo podrían confundirles y afianzar su
	  percepción de la complejidad del lenguaje. Tomando un ejemplo
	  de C, si memoriza la tabla de precedencia de los operadores
	  (yo nunca lo hice), puede escribir código más corto. Pero si
	  lo piensa, esto confundirá al lector/mantenedor de ese
	  código. Así que olvide la precedencia, y utilice paréntesis
	  cuando las cosas no estén claras. Esta misma actitud la
	  utilizaré con alguna otra información del lenguaje C++, que
	  creo que es más importante para escritores de compiladores que
	  para programadores.
	</para>
      </listitem>
      <listitem>

	<!--
	5. Keep each section focused enough so the lecture time -
	and the time between exercise periods - is reasonable. Not only
	does this keep the audience's minds more active and involved
	during a hands-on seminar, it gives the reader a greater sense
	of accomplishment.
	-->
	<para>
	  Mantener cada sección suficientemente enfocada como para que
	  el tiempo de lectura -y el tiempo entre bloques de ejercicios-
	  sea razonable. Eso mantiene las mentes de la audiencia más
	  activas e involucradas durante un seminario práctico, y además
	  le da al lector una mayor sensación de avance.
	</para>
      </listitem>

      <listitem>
	<!--
	6. Provide readers with a solid foundation so they can
	understand the issues well enough to move on to more difficult
	coursework and books (in particular, Volume 2 of this book).
	-->
	<para>
	  Ofrecer a los lectores una base sólida de manera que puedan
	  comprender las cuestiones lo suficientemente bien como para
	  pasar a otros cursos y libros más difíciles (en concreto,
	  el Volumen 2 de este libro).
	</para>
      </listitem>

      <listitem>

	<!--
	7. I've tried not to use any particular vendor's version of
	C++ because, for learning the language, I don't think that the
	details of a particular implementation are as important as the
	language itself. Most vendors' documentation concerning their
	own implementation specifics is adequate.
	-->
	<para>
	  He tratado de no utilizar ninguna versión de C++ de ningún
	  proveedor en particular porque, para aprender el lenguaje, no
	  creo que los detalles de una implementación concreta sean tan
	  importantes como el lenguaje mismo. La documentación sobre las
	  especificaciones de implementación propia de cada proveedor
	  suele ser adecuada.
	</para>
      </listitem>
    </orderedlist>
  </sect1>

  <sect1>
    <title>Capítulos</title>

    <!--
    C++ is a language in which new and different features are built
    on top of an existing syntax. (Because of this, it is referred to as
    a hybrid object-oriented programming language.) As more people pass
    through the learning curve, we've begun to get a feel for the way
    programmers move through the stages of the C++ language
    features. Because it appears to be the natural progression of the
    procedurally-trained mind, I decided to understand and follow this
    same path and accelerate the process by posing and answering the
    questions that came to me as I learned the language and those
    questions that came from audiences as I taught the language.
    -->
    <para>
      C++ es un lenguaje en el que se construyen características nuevas
      y diferentes sobre una sintaxis existente (por esta razón, nos
      referiremos a él como un lenguaje de programación orientado a
      objetos híbrido). Como mucha gente pasa por una curva de
      aprendizaje, hemos comenzado por adaptarnos a la forma en que los
      programadores pasan por las etapas de las cualidades del lenguaje
      C++. Como parece que la progresión natural es la de una mente
      entrenada de forma procedural, he decidido comprender y seguir el
      mismo camino y acelerar el proceso proponiendo y resolviendo las
      preguntas que se me ocurrieron cuando yo aprendía el lenguaje y
      también las que se les ocurrieron a la gente a la que lo enseñaba.
    </para>

    <!--
    This course was designed with one thing in mind: to streamline
    the process of learning C++. Audience feedback helped me understand
    which parts were difficult and needed extra illumination. In the
    areas in which I got ambitious and included too many features all at
    once, I came to know - through the process of presenting the
    material - that if you include a lot of new features, you have to
    explain them all, and the student's confusion is easily
    compounded. As a result, I've taken a great deal of trouble to
    introduce the features as few at a time as possible; ideally, only
    one major concept at a time per chapter.
    -->
    <para>
      El curso fue diseñado con algo en mente: hacer más eficiente el
      proceso de aprender C++. La reacción de la audiencia me ayudó a
      comprender qué partes eran difíciles y necesitaban una aclaración
      extra. En las áreas en las que me volvía ambicioso e incluía
      demasiadas cosas de una vez, me dí cuenta -mediante la
      presentación de material- de que si incluyes demasiadas
      características, tendrás que explicarlas todas, y es fácil que la
      confusión de los estudiantes se agrave. Como resultado, he tenido
      muchos problemas para introducir las características tan
      lentamente como ha sido posible; idealmente, sólo un concepto
      importante a la vez por capítulo.
    </para>

    <!--
    The goal, then, is for each chapter to teach a single concept,
    or a small group of associated concepts, in such a way that no
    additional features are relied upon. That way you can digest each
    piece in the context of your current knowledge before moving on. To
    accomplish this, I leave some C features in place for longer than I
    would prefer.  The benefit is that you will not be confused by
    seeing all the C++ features used before they are explained, so your
    introduction to the language will be gentle and will mirror the way
    you will assimilate the features if left to your own devices.
    -->
    <para>
      Así pues, el objetivo en cada capítulo es enseñar un concepto
      simple, o un pequeño grupo de conceptos asociados, en caso de que
      no haya más conceptos adicionales. De esa forma puede digerir cada
      parte en el contexto de su conocimiento actual antes de
      continuar. Para llevarlo a cabo, dejé algunas partes de C para más
      adelante de lo que me hubiese gustado. La ventaja es que se evita
      la confusión al no ver todas las características de C++ antes de
      que éstas sean explicadas, así su introducción al lenguaje será
      tranquila y reflejará la forma en que asimile las características
      que dejo en sus manos.
    </para>

    <!-- Here is a brief description of the chapters contained in this
    book: -->
    <para>
      He aquí una breve descripción de los capítulos que contiene
      este libro:
    </para>

    <formalpara>
      <title><link linkend="C01">Capítulo 1: Introducción a los objetos.</link></title>

      <!--
      Chapter 1: Introduction to Objects. When projects became too
      big and complicated to easily maintain, the "software crisis" was
      born, with programmers saying, "We can't get projects done, and if
      we can, they're too expensive!" This precipitated a number of
      responses, which are discussed in this chapter along with the
      ideas of object-oriented programming (OOP) and how it attempts to
      solve the software crisis.  The chapter walks you through the
      basic concepts and features of OOP and also introduces the
      analysis and design process. In addition, you'll learn about the
      benefits and concerns of adopting the language and suggestions for
      moving into the world of C++.
      -->
      <para>
	Cuando los proyectos se vuelven demasiado grandes y difíciles de
	mantener, nace la <quote>crisis del software</quote>, que es
	cuando los programadores dicen: <quote>¡No podemos terminar los
	proyectos, y cuando podemos, son demasiado caros!</quote>. Eso
	provocó gran cantidad de reacciones, que se discuten en este
	capítulo mediante las ideas de Programación Orientada a Objetos
	(<acronym>POO</acronym>) y cómo intenta ésta resolver la crisis
	del software. El capítulo le lleva a través de las
	características y conceptos básicos de la POO y también
	introduce los procesos de análisis y diseño. Además, aprenderá
	acerca de los beneficios y problemas de adaptar el lenguaje,
	y obtendrá sugerencias para adentrarse en el mundo de C++.
      </para>
    </formalpara>
    <formalpara>
      <title><link linkend="C02">Capítulo 2: Crear y usar objetos.</link></title>

      <!--
      Chapter 2: Making and Using Objects. This chapter explains
      the process of building programs using compilers and libraries. It
      introduces the first C++ program in the book and shows how
      programs are constructed and compiled. Then some of the basic
      libraries of objects available in Standard C++ are introduced. By
      the time you finish this chapter you'll have a good grasp of what
      it means to write a C++ program using off-the-shelf object
      libraries.  -->
      <para>
	Este capítulo explica el proceso de construir programas usando
	compiladores y librerías. Presenta el primer programa C++ del
	libro y muestra cómo se construyen y compilan los
	programas. Después se presentan algunas de las librerías de
	objetos básicas disponibles en C++ Estándar. Para
	cuando acabe el capítulo, dominará lo que se refiere a escribir
	un programa C++ utilizando las librerías de objetos
	predefinidas.
      </para>
    </formalpara>
    <formalpara>
      <title><link linkend="C03">Capítulo 3: El C de C++.</link></title>

      <!--
      Chapter 3: The C in C++. This chapter is a dense overview of
      the features in C that are used in C++, as well as a number of
      basic features that are available only in C++. It also introduces
      the "make" utility that's common in the software development world
      and that is used to build all the examples in this book (the
      source code for the book, which is available at
      www.BruceEckel.com, contains makefiles for each chapter). Chapter
      3 assumes that you have a solid grounding in some procedural
      programming language like Pascal, C, or even some flavors of Basic
      (as long as you've written plenty of code in that language,
      especially functions). If you find this chapter a bit too much,
      you should first go through the Thinking in C seminar on the CD
      that's bound with this book (and also available at
      www.BruceEckel.com).
      -->
      <para>
	Este capítulo es una densa vista general de las
	características de C que se utilizan en C++, así como gran
	número de características básicas que sólo están disponibles
	en C++. Además introduce la utilidad
	<application>make</application>, que es habitual en el
	desarrollo software de todo el mundo y que se utiliza para
	construir todos los ejemplos de este libro (el código fuente
	de los listados de este libro, que está disponible en <ulink
	url="http://www.BruceEckel.com">www.BruceEckel.com</ulink>,
	contiene los <filename>makefiles</filename> correspondientes a
	cada capítulo). En el capítulo 3 supongo que el lector tiene
	unos conocimientos básicos sólidos en algún lenguaje de
	programación procedural como Pascal, C, o incluso algún tipo
	de Basic (basta con que haya escrito algo de código en ese
	lenguaje, especialmente funciones). Si encuentra este capítulo
	demasiado difícil, debería mirar primero el seminario
	<citetitle>Pensar en C</citetitle> del CD que acompaña este
	libro (también disponible en <ulink
	url="http://www.BruceEckel.com">www.BruceEckel.com</ulink>).
      </para>
    </formalpara>
    <formalpara>
      <title><link linkend="C04">Capítulo 4: Abstracción de datos.</link></title>
      <!--
      Chapter 4: Data Abstraction. Most features in C++ revolve
      around the ability to create new data types. Not only does this
      provide superior code organization, but it lays the groundwork for
      more powerful OOP abilities. You'll see how this idea is
      facilitated by the simple act of putting functions inside
      structures, the details of how to do it, and what kind of code it
      creates. You'll also learn the best way to organize your code into
      header files and implementation files.  -->
      <para>
	La mayor parte de las características de C++ giran entorno a la
	capacidad de crear nuevos tipos de datos. Esto no sólo ofrece
	una mayor organización del código, también es la base preliminar
	para las capacidades de POO más poderosas. Verá cómo esta idea
	es posible por el simple hecho de poner funciones dentro de las
	estructuras, los detalles de cómo hacerlo, y qué tipo de código
	se escribe. También aprenderá la mejor manera de organizar su
	código mediante archivos de cabecera y archivos de
	implementación.
      </para>
    </formalpara>
    <formalpara>
      <title><link linkend="C05">Capítulo 5: Ocultar la implementación.</link></title>
      <!--
      Chapter 5: Hiding the Implementation. You can decide that
      some of the data and functions in your structure are unavailable
      to the user of the new type by making them private. This means
      that you can separate the underlying implementation from the
      interface that the client programmer sees, and thus allow that
      implementation to be easily changed without affecting client
      code. The keyword class is also introduced as a fancier way to
      describe a new data type, and the meaning of the word "object" is
      demystified (it's a fancy variable).  -->
      <para>
	El programador puede decidir que algunos de los datos y
	funciones de su estructura no estén disponibles para el usuario
	del nuevo tipo haciéndolas <emphasis>privadas</emphasis>. Eso
	significa que se puede separar la implementación principal de la
	interfaz que ve el programador cliente, y de este modo permitir
	que la implementación se pueda cambiar fácilmente sin afectar al
	código del cliente. La palabra clave <kw>class</kw> también se
	presenta como una manera más elaborada de describir un tipo de
	datos nuevo, y se desmitifica el significado de la palabra
	<quote>objeto</quote> (es una variable elaborada).
      </para>
    </formalpara>
    <formalpara>
      <title><link linkend="C06">Capítulo 6: Inicialización y limpieza.</link></title>
      <!--
      Chapter 6: Initialization and Cleanup. One of the most common
      C errors results from uninitialized variables. The constructor in
      C++ allows you to guarantee that variables of your new data type
      ("objects of your class") will always be initialized properly. If
      your objects also require some sort of cleanup, you can guarantee
      that this cleanup will always happen with the C++ destructor.  -->
      <para>
	Uno de los errores más comunes en C se debe a las variables no
	inicializadas. El <emphasis>constructor</emphasis> de C++
	permite garantizar que las variables de su nuevo tipo de datos
	(<quote>objetos de su clase</quote>) siempre se inicializarán
	correctamente. Si sus objetos también requieren algún tipo de
	reciclado, usted puede garantizar que ese reciclado se realice
	siempre mediante el <emphasis>destructor</emphasis> C++.
      </para>
    </formalpara>
    <formalpara>
      <title><link linkend="C07">Capítulo 7: Sobrecarga de funciones y
	  argumentos por defecto.</link></title>
      <!--
      Chapter 7: Function Overloading and Default Arguments. C++ is
      intended to help you build big, complex projects. While doing
      this, you may bring in multiple libraries that use the same
      function name, and you may also choose to use the same name with
      different meanings within a single library. C++ makes this easy
      with function overloading, which allows you to reuse the same
      function name as long as the argument lists are different. Default
      arguments allow you to call the same function in different ways by
      automatically providing default values for some of your arguments.
      -->
      <para>
	C++ está pensado para ayudar a construir proyectos grandes
	y complejos. Mientras lo hace, puede dar lugar a múltiples
	librerías que utilicen el mismo nombre de función, y también
	puede decidir utilizar un mismo nombre con diferentes
	significados en la misma biblioteca. Con C++ es sencillo gracias
	a la <quote>sobrecarga de funciones</quote>, lo que le permite
	reutilizar el mismo nombre de función siempre que la lista de
	argumentos sea diferente. Los argumentos por defecto le permiten
	llamar a la misma función de diferentes maneras proporcionando,
	automáticamente, valores por defecto para algunos de sus
	argumentos.
      </para>
    </formalpara>
    <formalpara>
      <title><link linkend="C08">Capítulo 8: Constantes.</link></title>
      <!--
      Chapter 8: Constants. This chapter covers the const and
      volatile keywords, which have additional meaning in C++,
      especially inside classes. You'll learn what it means to apply
      const to a pointer definition. The chapter also shows how the
      meaning of const varies when used inside and outside of classes
      and how to create compile-time constants inside classes.  -->
      <para>
	Este capítulo cubre las palabras reservadas <kw>const</kw>
	y <kw>volatile</kw>, que en C++ tienen un significado adicional,
	especialmente dentro de las clases. Aprenderá lo que significa
	aplicar <kw>const</kw> a una definición de puntero. El capítulo
	también muestra cómo varía el significado de <kw>const</kw>
	según se utilice dentro o fuera de las clases y cómo crear
	constantes dentro de clases en tiempo de compilación.
      </para>
    </formalpara>
    <formalpara>
      <title><link linkend="C09">Capítulo 9: Funciones inline.</link></title>
      <!--
      Chapter 9: Inline Functions. Preprocessor macros eliminate
      function call overhead, but the preprocessor also eliminates
      valuable C++ type checking. The inline function gives you all the
      benefits of a preprocessor macro plus all of the benefits of a
      real function call.  This chapter thoroughly explores the
      implementation and use of inline functions.  -->

      <para>
	Las macros del preprocesador eliminan la sobrecarga de
	llamada a función, pero el preprocesador también elimina la
	valiosa comprobación de tipos de C++. La función <kw>inline</kw> le
	ofrece todos los beneficios de una macro de preprocesador
	además de los beneficios de una verdadera llamada a
	función. Este capítulo explora minuciosamente la implementación
	y uso de las funciones <kw>inline</kw>.
      </para>
    </formalpara>
    <formalpara>
      <title><link linkend="C10">Capítulo 10: Control de nombres.</link></title>

      <!--
      Chapter 10: Name Control. Creating names is a fundamental
      activity in programming, and when a project gets large, the number
      of names can be overwhelming. C++ allows you a great deal of
      control over names in terms of their creation, visibility,
      placement of storage, and linkage. This chapter shows how names
      are controlled in C++ using two techniques. First, the static
      keyword is used to control visibility and linkage, and its special
      meaning with classes is explored. A far more useful technique for
      controlling names at the global scope is C++'s namespace feature,
      which allows you to break up the global name space into distinct
      regions.  -->
      <para>
	La elección de nombres es una actividad fundamental en la
	programación y, cuando un proyecto se vuelve grande, el número
	de nombres puede ser arrollador. C++ le permite un gran control
	de los nombres en función de su creación, visibilidad, lugar de
	almacenamiento y enlazado. Este capítulo muestra cómo se
	controlan los nombres en C++ utilizando dos técnicas. Primero,
	la palabra reservada <kw>static</kw> se utiliza para controlar
	la visibilidad y enlazado, y se explora su significado especial
	para clases. Una técnica mucho más útil para controlar los
	nombres a nivel global es el <kw>namespace</kw> de C++, que le
	permite dividir el espacio de nombres global en distintas
	regiones.
      </para>
    </formalpara>
    <formalpara>
      <title><link linkend="C11">Capítulo 11: Las referencias y el
	  constructor de copia.</link></title>
      <!--
      Chapter 11: References and the Copy-Constructor. C++ pointers
      work like C pointers with the additional benefit of stronger C++
      type checking. C++ also provides an additional way to handle
      addresses: from Algol and Pascal, C++ lifts the reference, which
      lets the compiler handle the address manipulation while you use
      ordinary notation. You'll also meet the copy-constructor, which
      controls the way objects are passed into and out of functions by
      value. Finally, the C++ pointer-to-member is illuminated.  -->
      <para>
	Los punteros de C++ trabajan como los punteros de C con el
	beneficio adicional de la comprobación de tipos más fuerte de
	C++. C++ también proporciona un método adicional para manejar
	direcciones: C++ imita la <emphasis>referencia</emphasis> de
	Algol y Pascal, que permite al compilador manipular las
	direcciones, pero utilizando la notación ordinaria. También
	encontrará el constructor-de-copia, que controla la manera en
	que los objetos se pasan por valor hacia o desde las
	funciones. Finalmente, se explica el puntero-a-miembro de C++.
      </para>
    </formalpara>
    <formalpara>
      <title><link linkend="C12">Capítulo 12: Sobrecarga de
      operadores.</link></title>

      <!--
      Chapter 12: Operator Overloading. This feature is sometimes
      called "syntactic sugar;" it lets you sweeten the syntax for using
      your type by allowing operators as well as function calls. In this
      chapter you'll learn that operator overloading is just a different
      type of function call and you'll learn how to write your own,
      dealing with the sometimes-confusing uses of arguments, return
      types, and the decision of whether to make an operator a member or
      friend.  -->
      <para>
	Esta característica se llama algunas veces <quote>azúcar
	sintáctico</quote>; permite dulcificar la sintaxis de uso de su
	tipo permitiendo operadores así como llamadas a funciones. En
	este capítulo aprenderá que la sobrecarga de operadores sólo es
	un tipo de llamada a función diferente y aprenderá cómo escribir
	sus propios operadores, manejando el -a veces confuso- uso de los
	argumentos, devolviendo tipos, y la decisión de si implementar
	el operador como método o función amiga.
      </para>
    </formalpara>
    <formalpara>
      <title><link linkend="C13">Capítulo 13: Creación dinámica de
      objetos.</link></title>
      <!--
      Chapter 13: Dynamic Object Creation. How many planes will an
      air-traffic system need to manage? How many shapes will a CAD
      system require? In the general programming problem, you can't know
      the quantity, lifetime, or type of objects needed by your running
      program.  In this chapter, you'll learn how C++'s new and delete
      elegantly solve this problem by safely creating objects on the
      heap. You'll also see how new and delete can be overloaded in a
      variety of ways so you can control how storage is allocated and
      released.  -->
      <para>
	¿Cuántos aviones necesitará manejar un sistema de tráfico aéreo?
	¿Cuántas figuras requerirá un sistema CAD? En el problema de la
	programación genérica, no se puede saber la cantidad, tiempo de
	vida o el tipo de los objetos que necesitará el programa una vez
	lanzado. En este capítulo aprenderá cómo <kw>new</kw> y
	<kw>delete</kw> solventan de modo elegante este problema en C++
	creando objetos en el montón. También verá cómo <kw>new</kw> y
	<kw>delete</kw> se pueden sobrecargar de varias maneras, de
	forma que puedan controlar cómo se asigna y se recupera el
	espacio de almacenamiento.
      </para>
    </formalpara>
    <formalpara>
      <title><link linkend="C14">Capítulo 14: Herencia y
      composición.</link></title>
      <!--
      Chapter 14: Inheritance and Composition. Data abstraction
      allows you to create new types from scratch, but with composition
      and inheritance, you can create new types from existing
      types. With composition, you assemble a new type using other types
      as pieces, and with inheritance, you create a more specific
      version of an existing type. In this chapter you'll learn the
      syntax, how to redefine functions, and the importance of
      construction and destruction for inheritance and composition.  -->
      <para>
	La abstracción de datos le permite crear tipos nuevos de la
	nada, pero con composición y herencia, se puede crear tipos
	nuevos a partir de los ya existentes. Con la composición, se puede
	ensamblar un tipo nuevo utilizando otros tipos como piezas
	y, con la herencia, puede crear una versión más específica de un
	tipo existente. En este capítulo aprenderá la sintaxis, cómo
	redefinir funciones y la importancia de la construcción y
	destrucción para la herencia y la composición.
      </para>
    </formalpara>
    <formalpara>
      <title><link linkend="C15">Capítulo 15: Polimorfismo y
	  funciones virtuales.</link></title>

      <!--
      Chapter 15: Polymorphism and virtual Functions. On your own,
      you might take nine months to discover and understand this
      cornerstone of OOP.  Through small, simple examples, you'll see
      how to create a family of types with inheritance and manipulate
      objects in that family through their common base class. The
      virtual keyword allows you to treat all objects in this family
      generically, which means that the bulk of your code doesn't rely
      on specific type information. This makes your programs extensible,
      so building programs and code maintenance is easier and cheaper.
      -->
      <para>
	Por su cuenta, podría llevarle nueve meses descubrir y
	comprender esta piedra angular de la POO. A través de ejercicios
	pequeños y simples, verá cómo crear una familia de tipos con
	herencia y manipular objetos de esa familia mediante su clase
	base común. La palabra reservada <kw>virtual</kw> le permite
	tratar todos los objetos de su familia de forma genérica, lo que
	significa que el grueso del código no depende de información de
	tipo específica. Esto hace extensibles sus programas, de manera
	que construir programas y mantener el código sea más sencillo y
	más barato.
      </para>
    </formalpara>
    <formalpara>
      <title><link linkend="C16">Capítulo 16: Introducción a las
      plantillas.</link></title>

      <!--
      Chapter 16: Introduction to Templates. Inheritance and
      composition allow you to reuse object code, but that doesn't solve
      all of your reuse needs. Templates allow you to reuse source code
      by providing the compiler with a way to substitute type names in
      the body of a class or function. This supports the use of
      container class libraries, which are important tools for the
      rapid, robust development of object-oriented programs (the
      Standard C++ Library includes a significant library of container
      classes). This chapter gives you a thorough grounding in this
      essential subject.  -->
      <para>
	La herencia y la composición permiten reutilizar el código
	objeto, pero eso no resuelve todas las necesidades de
	reutilización. Las plantillas permiten reutilizar el código
	fuente proporcionando al compilador un medio para sustituir el
	nombre de tipo en el cuerpo de una clase o función. Esto da
	soporte al uso de bibliotecas de <emphasis>clase
	contenedor</emphasis>, que son herramientas importantes para el
	desarrollo rápido y robusto de programas orientados a objetos
	(la Biblioteca Estándar de C++ incluye una biblioteca
	significativa de clases contenedor). Este capítulo ofrece una
	profunda base en este tema esencial.
      </para>
    </formalpara>

    <!--
    Additional topics (and more advanced subjects) are available in
    Volume 2 of this book, which can be downloaded from the Web site
    www.BruceEckel.com.  -->
    <para>
      Temas adicionales (y materias más avanzadas) están disponibles en
      el Volumen 2 del libro, que se puede descargar del sitio web
      <ulink url="http://www.BruceEckel.com">www.BruceEckel.com</ulink>.
    </para>
  </sect1>

  <sect1>
    <!-- Exercises -->
    <title>Ejercicios</title>

    <!-- I've discovered that exercises are exceptionally useful during
    a seminar to complete a student's understanding, so you'll find a
    set at the end of each chapter. The number of exercises has been
    greatly increased over the number in the first edition.  -->
    <para>
      He descubierto que los ejercicios son excepcionalmente útiles
      durante un seminario para completar la comprensión de los
      estudiantes, así que encontrará algunos al final de cada
      capítulo. El número de ejercicios ha aumentado enormemente
      respecto a la primera edición.
    </para>

  <!--
  Many of the exercises are fairly simple so that they can be finished
  in a reasonable amount of time in a classroom situation or lab section
  while the instructor observes, making sure all students are absorbing
  the material. Some exercises are a bit more challenging to keep
  advanced students entertained. The bulk of the exercises are designed
  to be solved in a short time and are intended only to test and polish
  your knowledge rather than present major challenges (presumably,
  you'll find those on your own - or more likely, they'll find you).
  -->
    <para>
      Muchos de los ejercicios son suficientemente sencillos como para
      que puedan terminarse en una cantidad de tiempo razonable en una
      clase o apartado de laboratorio mientras el profesor observa,
      asegurándose de que todos los estudiantes asimilan el
      material. Algunos ejercicios son un poco más complejos para
      mantener entretenidos a los estudiantes avanzados. El grueso de
      los ejercicios están orientados para ser resueltos en poco tiempo
      y se intenta sólo probar y pulir sus conocimientos más que
      presentar retos importantes (seguramente ya los encontrará por su
      cuenta -o mejor dicho-, ellos lo encontrarán a usted).
    </para>

    <sect2>
      <!-- Exercise solutions -->
      <title>Soluciones a los ejercicios</title>

  <!--
  Solutions to selected exercises can be found in the electronic
  document The Thinking in C++ Annotated Solution Guide, available for a
  small fee from www.BruceEckel.com.
  -->
      <para>
	Las soluciones a los ejercicios seleccionados pueden encontrarse
	en el documento electrónico <citetitle>El Solucionario de Pensar
	en C++</citetitle>, disponible por una pequeña cantidad en
	<ulink
	url="http://www.BruceEckel.com">www.BruceEckel.com</ulink>.
      </para>
    </sect2>
  </sect1>

  <sect1>
    <!-- Source code -->
    <title>Código fuente</title>

  <!--
  The source code for this book is copyrighted freeware, distributed via
  the Web site www.BruceEckel.com. The copyright prevents you from
  republishing the code in print media without permission, but you are
  granted the right to use it in many other situations (see below).
  -->
    <para>
      El código fuente de los listados de este libro está registrado
      como <foreignphrase>freeware</foreignphrase>, distribuido mediante
      el sitio Web <ulink
      url="http://www.BruceEckel.com">www.BruceEckel.com</ulink>. El
      copyright le impide publicar el código en un medio impreso sin
      permiso, pero se le otorga el derecho de usarlo de muchas otras
      maneras (ver más abajo).
    </para>

  <!--
  The code is available in a zipped file, designed to be extracted for
  any platform that has a "zip" utility (most do; you can search the
  Internet to find a version for your platform if you don't already have
  one installed). In the starting directory where you unpacked the code
  you will find the following copyright notice:
  -->
    <para>
      El código está disponible en un fichero comprimido, destinado a
      extraerse desde cualquier plataforma que tenga una utilidad
      <command>zip</command> (puede buscar en Internet para encontrar
      una versión para su platarforma si aún no tiene una instalada). En
      el directorio inicial donde desempaquete el código encontrará la
      siguiente nota sobre derechos de copia:
    </para>


<literallayout>
<xi:include parse="text" href="./code_v1/Copyright.txt"/>
</literallayout>


  <!--
  You may use the code in your projects and in the classroom as long as
  the copyright notice is retained.
  -->
    <para>
      Se puede usar el código en proyectos y clases siempre y cuando
      se mantenga la nota de copyright.
    </para>
  </sect1>


  <sect1>
    <!-- Language standards -->
    <title>Estándares del lenguaje</title>

    <!--
    Throughout this book, when referring to conformance to the ISO
    C standard, I will generally just say `C.' Only if it is necessary
    to distinguish between Standard C and older, pre-Standard versions
    of C will I make a distinction.  -->
    <para>
      Durante todo el libro, cuando se haga referencia al estándar
      de C ISO, generalmente se dirá <quote>C</quote>. Sólo si se
      necesita distinguir entre C estándar y otros más viejos,
      versiones previas al estándar de C, se hará una distinción.
    </para>

    <!--
    At this writing the C++ Standards Committee was finished
    working on the language. Thus, I will use the term Standard C++ to
    refer to the standardized language. If I simply refer to C++ you
    should assume I mean "Standard C++."  -->
    <para>
      Cuando se escribió este libro, el Comité de Estándares de C++ ya
      había terminado de trabajar en el lenguaje. Por eso, se usará el
      término <emphasis>C++ Estándar</emphasis> para referirse al
      lenguaje estandarizado. Si se hace referencia simplemente a C++,
      debería asumir que se quiere decir <quote>C++ Estándar</quote>.
    </para>

    <!--
    There is some confusion over the actual name of the C++
    Standards Committee and the name of the standard itself. Steve
    Clamage, the committee chair, clarified this: -->
    <para>
      Hay alguna confusión sobre el nombre real del Comité de
      Estándares de C++ y el nombre del estándar mismo. Steve Clamage, el
      presidente del comité, clarificó esto:
    </para>

    <!-- FIXME: no sé si es correcto formatearlo de la siguiente
    manera: -->

  <!--
  There are two C++ standardization committees: The NCITS (formerly X3)
  J16 committee and the ISO JTC1/SC22/WG14 committee. ANSI charters
  NCITS to create technical committees for developing American national
  standards.
  -->

    <blockquote>
      <para>
	Hay dos comités de estandarización de C++: El comité NCITS
	(antiguamente X3) J16 y el comité ISO JTC1/SC22/WG14. ANSI
	alquila NCITS para crear comités técnicos para desarrollar
	estándares nacionales americanos.
      </para>
    </blockquote>


    <!--
    J16 was chartered in 1989 to create an American standard for
    C++. In about 1991 WG14 was chartered to create an international
    standard. The J16 project was converted to a "Type I"
    (International) project and subordinated to the ISO standardization
    effort.  -->
    <blockquote>
      <para>
	J16 fue alquilado en 1989 para crear un estándar
	americano para C++. Por el año 1991 se alquiló WG14 para crear
	un estándar internacional. El proyecto J16 se convirtió en un
	proyecto <quote>Tipo I</quote> (Internacional) y se subordinó
	al esfuerzo de estandarización de ISO.
      </para>
    </blockquote>

  <!--
  The two committees meet at the same time at the same location, and the
  J16 vote constitutes the American vote on WG14. WG14 delegates
  technical work to J16. WG14 votes on the technical work of J16.
  -->
    <blockquote>
    <para>
	Los dos comités se encontraban al mismo tiempo en el mismo
	sitio, y el voto de J16 constituye el voto americano con
	WG14. WG14 delega el trabajo técnico a J16. WG14 vota por el
	trabajo técnico de J16.
    </para>
    </blockquote>

      <!--
  The C++ standard was originally created as an ISO standard. ANSI later
  voted (as recommended by J16) to adopt the ISO C++ standard as the
  American standard for C++.
  -->
    <blockquote>
    <para>
	El estándar de C++ fue creado originalmente como un estándar
	ISO. ANSI votó más tarde (como recomendaba J16) para adoptar el
	estándar de C++ ISO como el estándar americano para C++.
    </para>
    </blockquote>

    <!-- Thus, `ISO' is the correct way to refer to the C++
    Standard. -->
    <para>
      Por eso, <quote>ISO</quote> es la forma correcta de referirse al
      Estándar C++.
    </para>


    <sect2>
      <!-- Language support -->
      <title>Soporte del lenguaje</title>

      <!-- Your compiler may not support all of the features discussed
      in this book, especially if you don't have the newest version of
      the compiler.  Implementing a language like C++ is a Herculean
      task, and you can expect that the features will appear in pieces
      rather than all at once. But if you attempt one of the examples in
      the book and get a lot of errors from the compiler, it's not
      necessarily a bug in the code or the compiler; it may simply not
      be implemented in your particular compiler yet.
      -->
      <para>
	Puede que su compilador no disponga de todas las características
	discutidas en este libro, especialmente si no tiene la versión
	más recente del compilador. Implementar un lenguaje como C++ es
	una tarea hercúlea, y puede esperar que las características
	aparecerán poco a poco en lugar de todas a la vez. Pero si
	prueba uno de los ejemplos del libro y obtiene un montón de
	errores del compilador, no es necesariamente un error en el
	código o en el compilador; simplemente puede no estar implementado
	aún en su compilador particular.
      </para>
    </sect2>
  </sect1>


  <sect1>
    <!-- The book's CD ROM -->
    <title>El CD-ROM del libro</title>

    <!--
    The primary content of the CD ROM packaged in the back of this
    book is a "seminar on CD ROM" titled Thinking in C: Foundations for
    Java & C++ by Chuck Allison (published by MindView, Inc., and also
    available in quantities at www.BruceEckel.com). This contains many
    hours of audio lectures and slides, and can be viewed on most
    computers if you have a CD ROM player and a sound system.  -->
    <para>
      El contenido principal del CD-ROM empaquetado al final de este
      libro es un <quote>seminario en CD-ROM</quote> titulado
      <citetitle>Pensar en C: Fundamentos para Java y C++</citetitle>
      obra de Chuck Allison (publicado por MindView, Inc., y también
      disponible en <ulink
      url="http://www.BruceEckel.com">www.BruceEckel.com</ulink>). Contiene
      muchas horas de grabaciones y transparencias, que pueden mostrarse
      en la mayoría de las computadoras que dispongan de lector de
      CD-ROM y sistema de sonido.
    </para>

    <!--
    The goal of Thinking in C is to take you carefully through the
    fundamentals of the C language. It focuses on the knowledge
    necessary for you to be able to move on to the C++ or Java languages
    instead of trying to make you an expert in all the dark corners of
    C. (One of the reasons for using a higher-level language like C++ or
    Java is precisely so we can avoid many of these dark corners.) It
    also contains exercises and guided solutions. Keep in mind that
    because Chapter 3 of this book goes beyond the Thinking in C CD, the
    CD is not a replacement for that chapter, but should be used instead
    as a preparation for this book.  -->
    <para>
      El objetivo de <citetitle>Pensar en C</citetitle> es llevarle
      cuidadosamente a través de los fundamentos del lenguaje C. Se
      centra en el conocimiento que necesita para poder pasarse a C++ o
      Java en lugar de intentar hacerle un experto en todos los
      recovecos de C (una de las razones de utilizar un lenguaje de alto
      nivel como C++ o Java es, precisamente, que se pueden evitar
      muchos de esos recovecos). También contiene ejercicios y
      soluciones guiadas. Téngalo en cuenta porque el <link
      linkend="C03">Capítulo 3</link> de este libro va más allá del CD de
      <citetitle>Pensar en C</citetitle>, el CD no es una alternativa a
      este capítulo, sino que debería utilizarse como preparación para
      este libro.
    </para>

    <!-- Please note that the CD ROM is browser-based, so you should
    have a Web browser installed on your machine before using it.  -->
    <para>
      Por favor, tenga en cuenta que el CD-ROM está basado en navegador,
      por lo que debería tener un navegador Web instalado en su máquina
      antes de utilizarlo.
    </para>
  </sect1>


  <sect1>
    <!-- CD ROMs, seminars, and consulting  -->
    <title>CD-ROMs, seminarios, y consultoría</title>

    <!-- There are seminars-on-CD-ROM planned to cover Volume 1 and
    Volume 2 of this book. These comprise many hours of audio lectures
    by me that accompany slides that cover selected material from each
    chapter in the book. They can be viewed on most computers if you
    have a CD ROM player and a sound system. These CDs may be purchased
    at www.BruceEckel.com, where you will find more information and
    sample lectures.  -->
    <para>
      Hay seminarios en CD-ROM planeados para cubrir el Volumen 1 y el
      Volumen 2 de este libro.  Comprenden muchas horas de grabaciones
      mías que acompañan las transparencias que cubren el material
      seleccionado de cada capítulo del libro. Se pueden ver en la
      mayoría de las computadoras que disponen de lector de CDROM y
      sistema de sonido. Estos CDs pueden comprarse en <ulink
      url="http://www.BruceEckel.com">www.BruceEckel.com</ulink>, donde
      encontrará más información y lecturas de ejemplo.
    </para>


    <!-- FIXME: en el siguiente párrafo aparece la expresión "code
    walkthrows" que no sé traducir. -->

    <!--
    My company, MindView, Inc., provides public hands-on training
    seminars based on the material in this book and also on advanced
    topics.  Selected material from each chapter represents a lesson,
    which is followed by a monitored exercise period so each student
    receives personal attention. We also provide on-site training,
    consulting, mentoring, and design and code walkthroughs. Information
    and sign-up forms for upcoming seminars and other contact
    information can be found at www.BruceEckel.com.  -->
    <para>
      Mi compañía, MindView, Inc., proporciona seminarios públicos de
      preparación práctica basados en el material de este libro y
      también en temas avanzados. El material seleccionado de cada
      capítulo representa una lección, que se continúa con un periodo de
      ejercicios monitorizados para que cada estudiante reciba atención
      personal. También proporcionamos preparación <quote>in
      situ</quote>, consultoría, tutorización, diseño y asistentes de
      código. Puede encontrar la información y los formularios para los
      próximos seminarios, así como otra información de contacto, en
      <ulink url="http://www.BruceEckel.com">www.BruceEckel.com</ulink>.
    </para>

    <!--
    I am sometimes available for design consulting, project
    evaluation and code walkthroughs. When I first began writing about
    computers, my primary motivation was to increase my consulting
    activities, because I find consulting to be challenging,
    educational, and one of my most enjoyable experiences,
    professionally. Thus I will try my best to fit you into my schedule,
    or to provide you with one of my associates (who are people that I
    know well and trust, and often people who co-develop and teach
    seminars with me).  -->
    <para>
      A veces me encuentro disponible para consultas de diseño,
      evaluación de procesos y asistencia. Cuando comencé a escribir
      sobre computadoras, mi motivación principal fue incrementar mis
      actividades de consultoría, porque encontraba que la consultoría
      era competitiva, educacional, y una de mis experiencias
      profesionales más valiosas. Así que haré todo lo que pueda para
      incluirle a usted en mi agenda, o para ofrecerle uno de mis
      socios (que son gente que conozco bien y con la que he tratado, y
      a menudo co-desarrollan e imparten seminarios conmigo).
    </para>
  </sect1>


  <sect1>
    <!-- Errors -->
    <title>Errores</title>

    <!--
    No matter how many tricks a writer uses to detect errors, some
    always creep in and these often leap off the page to a fresh
    reader. If you discover anything you believe to be an error, please
    use the correction form you will find at www.BruceEckel.com. Your
    help is appreciated.  -->
    <para>
      No importa cuántos trucos emplee un escritor para detectar los
      errores, algunos siempre se escapan y saltan del papel al
      lector atento. Si encuentra algo que crea que es un error, por
      favor, utilice el formulario de correcciones que encontrará
      en <ulink
	url="http://www.BruceEckel.com">www.BruceEckel.com</ulink>. Se
      agradece su ayuda.
    </para>
  </sect1>


  <sect1>
    <!-- About the cover -->
    <title>Sobre la portada</title>

    <!--
    The first edition of this book had my face on the cover, but I
    originally wanted a cover for the second edition that was more of a
    work of art like the Thinking in Java cover. For some reason, C++
    seems to me to suggest Art Deco with its simple curves and brushed
    chrome. I had in mind something like those posters of ships and
    airplanes with the long sweeping bodies.  -->
    <para>
      La primera edición de este libro tenía mi cara en la portada, pero
      para la segunda edición yo quería desde el principio una portada
      que se pareciera más una obra de arte, como la portada de
      <citetitle>Pensar en Java</citetitle>. Por alguna razón, C++
      parece sugerirme Art Decó con sus curvas simples y pinceladas
      cromadas. Tenía en mente algo como esos carteles de barcos y
      aviones con cuerpos largos.
    </para>

    <!--
    My friend Daniel Will-Harris, (www.Will-Harris.com) whom I first
    met in junior high school choir class, went on to become a
    world-class designer and writer. He has done virtually all of my
    designs, including the cover for the first edition of this
    book. During the cover design process, Daniel, unsatisfied with the
    progress we were making, kept asking "How does this relate people to
    computers?" We were stuck.  -->
    <para>
      Mi amigo Daniel Will-Harris, (<ulink
	url="http://www.Will-Harris.com">www.Will-Harris.com</ulink>) a
	quien conocí en las clases del coro del instituto, iba a llegar
	a ser un diseñador y escritor de talla mundial. Él ha hecho
	prácticamente todos mis diseños, incluída la portada para la
	primera edición de este libro. Durante el proceso de diseño de
	la portada, Daniel, insatisfecho con el progreso que
	realizábamos, siempre preguntaba: <quote>¿Qué relación hay entre
	las personas y las computadoras?</quote>. Estábamos atascados.
    </para>

    <!--
    On a whim, with no particular outcome in mind, he asked me to
    put my face on the scanner. Daniel had one of his graphics programs
    (Corel Xara, his favorite) "autotrace" the scan of my face. As he
    describes it, "Autotracing is the computer's way to turn a picture
    into the kinds of lines and curves it really likes." Then he played
    with it until he had something that looked like a topographic map of
    my face, an image that might be the way a computer could see people.
    -->
    <para>
      Como capricho, sin nada en mente, me pidió que pusiera mi cara en
      el escáner. Daniel tenía uno de sus programas gráficos (Corel
      Xara, su favorito) que <quote>autotrazó</quote> mi cara
      escaneada. Él lo describe de la siguente manera: <quote>El
      autotrazado es la forma en la que la computadora transforma
      un dibujo en los tipos de líneas y curvas que realmente le
      gustan</quote>. Entonces jugó con ello hasta que obtuvo algo que
      parecía un mapa topográfico de mi cara, una imagen que podría
      ser la manera en que la computadora ve a la gente.
    </para>

    <!--
    I took this image and photocopied it onto watercolor paper
    (some color copiers can handle thick stock), and then started
    creating lots of experiments by adding watercolor to the image. We
    selected the ones we liked best, then Daniel scanned them back in
    and arranged them into the cover, adding the text and other design
    elements. The whole process happened over several months, mostly
    because of the time it took me to do the watercolors. But I've
    especially enjoyed it because I got to participate in the art on the
    cover, and because it gave me incentive to do more watercolors (what
    they say about practice really is true).  -->
    <para>
      Cogí esta imagen y la fotocopié en papel de acuarela (algunas
      copiadoras pueden manejar papeles gruesos), y entonces comenzó a
      realizar montones de experimentos añadiendo acuarela a la
      imagen. Seleccionamos las que nos gustaban más, entonces Daniel
      las volvió a escanear y las organizó en la portada, añadiendo el
      texto y otros elementos de diseño. El proceso total requirió
      varios meses, mayormente a causa del tiempo que me tomó hacer las
      acuarelas. Pero me he divertido especialmente porque conseguí
      participar en el arte de la portada, y porque me dio un incentivo
      para hacer más acuarelas (lo que dicen sobre la práctica realmente
      es cierto).
    </para>

  </sect1>

  <sect1>
    <!-- Book design and production -->
    <title>Diseño del libro y producción</title>

    <!--
    The book's interior design was created by Daniel Will-Harris,
    who used to play with rub-on letters in junior high school while he
    awaited the invention of computers and desktop publishing. However,
    I produced the camera-ready pages myself, so the typesetting errors
    are mine.  Microsoft^® Word for Windows Versions 8 and 9 were used
    to write the book and to create camera-ready pages, including
    generating the table of contents and index. (I created a COM
    automation server in Python, called from Word VBA macros, to aid me
    in index marking.) Python (see www.Python.org) was used to create
    some of the tools for checking the code, and would have been use for
    the code extraction tool had I discovered it earlier.  -->
    <para>
      El diseño del interior del libro fue creado por Daniel
      Will-Harris, que solía jugar con letras (FIXME:rub-on) en el
      instituto mientras esperaba la invención de las computadoras y la
      publicación de escritorio. De todos modos, yo mismo produje las
      páginas para impresión
      (<foreignphrase>camera-ready</foreignphrase>), por lo que los
      errores tipográficos son míos. Se utilizó <trademark
      class="registered">Microsoft</trademark> Word para Windows
      Versiones 8 y 9 para escribir el libro y crear la versión para
      impresión, incluyendo la generación de la tabla de contenidos y el
      índice (creé un servidor automatizado COM en Python, invocado
      desde las macros VBA de Word, para ayudarme en el marcado de los
      índices). Python (vea <ulink
      url="http://www.BruceEckel.com">www.python.com</ulink>) se utilizó
      para crear algunas de las herramientas para comprobar el código, y
      lo habría utilizado como herramienta de extracción de código si lo
      hubiese descubierto antes.
    </para>

    <!--
    I created the diagrams using Visio^® - thanks to Visio
    Corporation for creating a useful tool.  -->
    <para>
      Creé los diagramas utilizando <trademark
	class="registered">Visio</trademark>. Gracias a <orgname>Visio
	Corporation</orgname> por crear una herramienta tan útil.
    </para>

    <!--
    The body typeface is Georgia and the headlines are in
    Verdana. The final camera-ready version was produced in Adobe^®
    Acrobat 4 and taken directly to press from that file - thanks very
    much to Adobe for creating a tool that allows e-mailing camera-ready
    documents, as it enables multiple revisions to be made in a single
    day rather than relying on my laser printer and overnight express
    services. (We first tried the Acrobat process with Thinking in Java,
    and I was able to upload the final version of that book to the
    printer in the U.S. from South Africa.)  -->
    <para>
      El tipo de letra del cuerpo es Georgia y los títulos utilizan
      Verdana. La versión definitiva se creó con <trademark
      class="registered">Adobe</trademark> Acrobat 4 y el fichero
      generado se llevó directamente a la imprenta - muchas gracias a
      Adobe por crear una herramienta que permite enviar documentos
      listos para impresión por correo electrónico, así como permitir
      que se realicen múltiples revisiones en un único día en lugar de
      recaer sobre mi impresora láser y servicios rápidos 24 horas
      (probamos el proceso Acrobat por primera vez con <citetitle>Pensar
      en Java</citetitle>, y fui capaz de subir la versión final de ese
      libro a la imprenta de U.S. desde Sudáfrica).
    </para>

    <!--
    The HTML version was created by exporting the Word document to
    RTF, then using RTF2HTML (see http://www.sunpack.com/RTF/) to do
    most of the work of the HTML conversion. (Thanks to Chris Hector for
    making such a useful, and especially reliable, tool.) The resulting
    files were cleaned up using a custom Python program that I hacked
    together, and the WMFs were converted to GIFs using JASC^® PaintShop
    Pro 6 and its batch conversion tool (thanks to JASC for solving so
    many problems for me with their excellent product). The color syntax
    highlighting was added via a Perl script kindly contributed by Zafir
    Anjum.  -->
    <para>
      La versión HTML se creó exportando el documento Word a RTF, y
      utilizando entonces RTF2HTML (ver <ulink
      url="http://www.sunpack.com/RTF/">http://www.sunpack.com/RTF/</ulink>)
      para hacer la mayor parte del trabajo de la conversión HTML
      (gracias a Chris Hector por hacer una herramienta tan útil y
      especialmente fiable). Los ficheros resultantes se limpiaron
      utilizando un programa Python que truqué, y los WMFs se
      transformaron en GIFs utilizando el PaintShop Pro 6 de <trademark
      class="registered">JASC</trademark> y su herramienta de conversión
      por lotes (gracias a JASC por resolver tantos de mis problemas con
      su excelente producto). El realce del color de la sintaxis se
      añadió con un script Perl amablemente cedido por Zafir Anjum.
    </para>
  </sect1>



  <sect1>
    <!-- Acknowledgements -->
    <title>Agradecimientos</title>

    <!--
    First, thanks to everyone on the Internet who submitted
    corrections and suggestions; you've been tremendously helpful in
    improving the quality of this book, and I couldn't have done it
    without you. Special thanks to John Cook.  -->
    <para>
      Lo primero, agradecer a todo aquel que presentó correcciones y
      sugerencias desde Internet; han sido de tremenda ayuda para
      mejorar la calidad de este libro, y no podría haberlo hecho
      sin ustedes. Gracias en especial a John Cook.
    </para>

    <!--
    The ideas and understanding in this book have come from many
    sources: friends like Chuck Allison, Andrea Provaglio, Dan Saks,
    Scott Meyers, Charles Petzold, and Michael Wilk; pioneers of the
    language like Bjarne Stroustrup, Andrew Koenig, and Rob Murray;
    members of the C++ Standards Committee like Nathan Myers (who was
    particularly helpful and generous with his insights), Bill Plauger,
    Reg Charney, Tom Penello, Tom Plum, Sam Druker, and Uwe
    Steinmueller; people who have spoken in my C++ track at the Software
    Development Conference; and often students in my seminars, who ask
    the questions I need to hear in order to make the material more
    clear.  -->
    <para>
      Las ideas y comprensión de este libro han llegado de varias
      fuentes: amigos como Chuck Allison, Andrea Provaglio, Dans
      Sakx, Scott Meyers, Charles Petzold y Michael Wilk; pioneros
      del lenguaje como Bjarne Stroustrup, Andrew Koenig y Rob
      Murray; miembros del Comité de Estándares de C++ como Nathan
      Myers (que fue de particular ayuda y generosidad con sus
      percepciones), Bill Plauger, Reg Charney, Tom Penello, Tom
      Plum, Sam Druker y Uwe Steinmueller; gente que ha hablado en mis
      charlas de C++ en la Conferencia de Desarrollo de Software;
      y a menudo estudiantes de mis seminarios, que preguntan
      aquello que necesito oír para aclarar el material.
    </para>

    <!--
    A huge thank-you to my friend Gen Kiyooka, whose company
    Digigami has provided me with a web server.  -->
    <para>
      Enormes agradecimientos para mi amigo Gen Kiyooka, cuya
      compañía Digigami me proporcionó un servidor web.
    </para>

    <!--
    My friend Richard Hale Shaw and I have taught C++ together;
    Richard's insights and support have been very helpful (and Kim's,
    too). Thanks also to KoAnn Vikoren, Eric Faurot, Jennifer Jessup,
    Tara Arrowood, Marco Pardi, Nicole Freeman, Barbara Hanscome, Regina
    Ridley, Alex Dunne, and the rest of the cast and crew at MFI.  -->
    <para>
      Mi amigo Richard Hale Shaw y yo hemos enseñado C++ juntos; las
      percepciones de Richard y su apoyo han sido muy útiles (y las
      de Kim también). Gracias también a DoAnn Vikoren, Eric Faurot,
      Jennifer Jessup, Tara Arrowood, Marco Pardi, Nicole Freeman,
      Barbara Hanscome, Regina Ridley, Alex Dunne y el resto del
      reparto y plantilla de MFI.
    </para>

    <!--
    A special thanks to all my teachers and all my students (who
    are my teachers as well).  -->
    <para>
      Un agradecimiento especial para todos mis profesores y
      todos mis estudiantes (que también son profesores).
    </para>

    <!--
    And for favorite writers, my deep appreciation and sympathy for
    your efforts: John Irving, Neal Stephenson, Robertson Davies (we
    shall miss you), Tom Robbins, William Gibson, Richard Bach, Carlos
    Castaneda, and Gene Wolfe.  -->
    <para>
      Y para mis escritores favoritos, mi más profundo aprecio y
      simpatía por vuestros esfuerzos: John Irving, Neal Stephenson,
      Robertson Davies (te echaremos de menos), Tom Robbins, William
      Gibson, Richard Bach, Carlos Castaneda y Gene Wolfe.
    </para>

    <!--
    To Guido van Rossum, for inventing Python and giving it
    selflessly to the world. You have enriched my life with your
    contribution.  -->
    <para>
      A Guido van Rossum, por inventar Python y donarlo
      desinteresadamente al mundo. Has enriquecido mi vida con tu
      contribución.
    </para>

    <!--
    Thanks to the people at Prentice Hall: Alan Apt, Ana Terry,
    Scott Disanno, Toni Holm, and my electronic copy-editor Stephanie
    English.  In marketing, Bryan Gambrel and Jennie Burger.  -->
    <para>
      Gracias a la gente de Prentice Hall: Alan Apt, Ana Terry,
      Scott Disanno, Toni Holm y mi editora de copias electrónicas
      Stephanie English. En márqueting, Bryan Gambrel y Jennie
      Burger.
    </para>

    <!--
    Sonda Donovan helped with the production of the CD Rom. Daniel
    Will-Harris (of course) created the silkscreen design that's on the
    Disc itself.
    -->
    <para>
      Sonda Donovan me ayudó con la producción del CD ROM. Daniel
      Will-Harris (por supuesto) creó el diseño de la portada que se
      encuentra en el propio CD.
    </para>

    <!--
    To all the great folks in Crested Butte, thanks for making it a
    magical place, especially Al Smith (creator of the wonderful Camp4
    Coffee Garden), my neighbors Dave & Erika, Marsha at Heg's Place
    bookstore, Pat & John at the Teocalli Tamale, Sam at the Bakery
    Café, and Tiller for his help with audio research. And to all the
    terrific people that hang out at Camp4 in and make my mornings
    interesting.  -->
    <para>
      Para todos los grandes amigos de Crested Butte, gracias por hacer
      de él un lugar mágico, especialmente a Al Smith (creador del
      maravilloso Camp4 Coffee Garden), mis vecinos Dave y Erika, Marsha
      de la librería Heg's Place, Pat y John de Teocalli Temale, Sam de
      Barkery Café, y a Tiller por su ayuda con la investigación en
      audio. Y a toda la gente fenomenal que anda por Camp4 y hace
      interesantes mis mañanas.
    </para>


    <!--
    The supporting cast of friends includes, but is not limited to,
    Zack Urlocker, Andrew Binstock, Neil Rubenking, Kraig Brockschmidt,
    Steve Sinofsky, JD Hildebrandt, Brian McElhinney, Brinkley Barr,
    Larry O'Brien, Bill Gates at Midnight Engineering Magazine, Larry
    Constantine, Lucy Lockwood, Tom Keffer, Dan Putterman, Gene Wang,
    Dave Mayer, David Intersimone, Claire Sawyers, the Italians (Andrea
    Provaglio, Rossella Gioia, Laura Fallai, Marco & Lella Cantu,
    Corrado, Ilsa and Christina Giustozzi), Chris and Laura Strand (and
    Parker), the Almquists, Brad Jerbic, Marilyn Cvitanic, the Mabrys,
    the Haflingers, the Pollocks, Peter Vinci, the Robbins, the
    Moelters, Dave Stoner, Laurie Adams, the Cranstons, Larry Fogg, Mike
    and Karen Sequeira, Gary Entsminger and Allison Brody, Kevin, Sonda,
    & Ella Donovan, Chester and Shannon Andersen, Joe Lordi, Dave and
    Brenda Bartlett, the Rentschlers, Lynn and Todd, and their
    families. And of course, Mom and Dad.  -->
    <para>
      <!-- FIXME: "ALMQUISTS" "alquimistas" ?? -->

      La lista de amigos que me han dado soporte incluye, pero no está
      limitada, a Zack Urlocker, Andrew Binstock, Neil Rubenking, Kraig
      Brocschmidt, Steve Sinofsky, JD Hildebrandt, Brian McElhinney,
      Brinkey Barr, Larry O'Brien, Bill Gates en <citetitle>Midnight
      Engineering Magazine</citetitle>, Larry Constantine, Lucy
      Lockwood, Tom Keffer, Dan Putterman, Gene Wang, Dave Mayer, David
      Intersimone, Claire Sawyers, los Italianos (Andrea Provaglio,
      Rossella Gioia, Laura Fallai, Marco &amp; Lella Cantu, Corrado,
      Ilsa y Christina Giustozzi), Chris y Laura Strand (y Parker), los
      Alquimistas, Brad Jerbic, Marilyn Cvitanic, el
      Mabrys, el Halflingers, los Pollocks, Peter Vinci, los Robbins,
      los Moelters, Dave Stoner, Laurie Adams, los Cranstons, Larry
      Fogg, Mike y karen Sequeira, Gary Entsminger y Allison Brody,
      Kevin, Sonda &amp; Ella Donovan, Chester y Shannon Andersen, Joe
      Lordi, Dave y Brenda Barlett, los Rentschlers, Lynn y Todd y sus
      familias. Y por supuesto, a Mamá y Papá.
    </para>
  </sect1>
</preface>