软件工程师手册/语言词典/C++
C++ 是一种完整的 多范式 编程语言,它实现了以下范式:泛型 (模板 元编程)、命令式 和 面向对象 (基于类)。
可执行文件从 main() 方法开始。
典型的语句以分号结尾。要将 b 赋值给 a,请使用
a = b;
// this is an inline comment. Everything after the // is a comment.
块注释以 /* 开始,以 */ 结束。它们可以跨越多行。
/*
* this is a block comment
*/
声明可以出现在实现中的任何位置。
将 i 声明为整数
int i;
以下是两种将 i 声明为整数并为其赋予初始值 0 的方法
int i = 0;
int i(0);
方法通过指定方法的接口来声明。它通常在类的范围内声明。
return_type function_name(argument_1_type arg_1_name,
argument_2_type arg_2_name,
default_argument_type default_arg_name = default_arg_value);
方法实现重复了大部分相同的信息
return_type class_name::function_name(argument_1_type arg_1_name,
argument_2_type arg_2_name,
default_argument_type default_arg_name)
{
// work with arg_1_name, arg_2_name, and default_arg_name
// depending on the argument types the variables are passed by
// value, reference, or are constant
// don't forget to return something of the return type
return 36;
}
重要提示 C/C++ 初学者可能会对函数原型中如何声明指针与如何定义函数之间的区别感到困惑。例如,如果 my_function 不返回任何内容,但接受一个浮点输入,则其函数原型如下所示
void my_function(float *some_variable);
但是,如果变量 my_var 被定义为指向浮点数的指针,例如
float *my_var;
然后调用 my_function 的方式如下
my_function(my_var);
初学者有时会对在原型语句中使用 "*" 来告诉编译器一个变量是指针,但在接受指针作为输入的函数调用过程中语法上不使用 "*"感到困惑。
作用域由大括号定义。
{ // this the beginning of a scope
// the scope is about to end
}
当且仅当 A 等于 B 时,将 C 赋值给 D,否则将 E 赋值给 F。
if( A == B )
{
D = C;
// more code can be added here. It is used if and only if A is equal to B
}
else
{
F = E;
// more code can be added here. It is used if and only if A is not equal to B
}
或者
if( A == B )
D = C; //more lines of code are not permitted after this statement
else
F = E;
或者,可以使用 switch 语句进行多项选择操作。此示例将数字输入转换为文本。
switch( number_value )
{
case 37:
text = "thirty-seven";
break; // this line prevents the program from writing over this value with the
// following code
case 23:
text = "twenty-three";
break;
default: // this is used if none of the previous cases contain the value
text = "unknown number";
}
此代码从 0 到 9 计数,将数组的内容加起来。
int i = 0;
for( int index = 0; index < 10; index = index + 1 )
{
i = array[index];
}
此代码重复执行,直到找到数字 4 为止。如果它运行到数组的末尾,可能会出现问题。
int index = 0;
while( 4 != array[index] )
{
index = index + 1;
}
此代码在检查之前递增计数器,因此它从元素 1 开始。
int index = 0;
do
{
index = index + 1;
}
while( 4 != array[index] );
printf( "%s","Hello world!\n" );
或者
std::cout << "Hello world!" << std::endl;
标准模板库包含各种容器,包括向量、位集、列表、映射和多重集。
标准模板库包含各种算法,包括排序、删除和查找。
垃圾回收是手动的。
通常,接口定义在头文件中,通常为 *.h。实现文件通常命名为 *.cpp。有用的类集合可以编译成库,通常为 *.dll、*.a 或 *.so,它们可以编译成可执行文件(静态链接)或在运行时使用(动态链接)。
不要混淆这两者
= // assignment
== // comparison, is equal to
通常,使用你不想使用的那个会编译,并会产生你没有预期的结果。
一个好的实践是编写; if(CONSTANT == variable) 而不是 if(variable == CONSTANT),因为编译器会捕捉; if(CONSTANT = variable) 但不会捕捉 if(variable = CONSTANT)。
数组从索引 0 开始。
- Bruce Eckel,Thinking in C++,卷 1:标准 C++ 简介 ISBN 0139798099。它帮助许多人从 C 语言过渡到 C++ 语言。它可以在 Bruce Eckel 的网站 上免费获取。
- Nicolai M. Josuttis,The C++ Standard Library : A Tutorial and Reference ISBN 0201379260。它包含关于标准模板库容器和算法的冗长而深入的讨论。
- Stanley B. Lippman、Josée Lajoie & Barbara E. Moo,C++ Primer ISBN 0321714113。这是一本非常全面的 C++ 入门书,它用了近 1000 页来介绍 C++ 编程。
- Andrew Koenig & Barbara E. Moo,Accelerated C++ ISBN 020170353X。这是另一本 C++ 入门书,但它强调使用 STL。它是一本相当紧凑的入门书,学习曲线较陡,更适合那些已经熟悉其他编程语言的人。
- Scott Meyers,Effective C++ ISBN 0321334876、More Effective C++ ISBN 020163371X、Effective STL ISBN 0201749629。Meyers 的系列书籍包含 C++ 最佳实践,从类设计到最小化编译依赖关系。
- Herbert Schildt,C++: The Complete Reference ISBN 0072226803。它包含代码语法和用法的字典式列表。它的结构不适合从头开始学习这门语言。然而,它在从类似语言切换时非常有用。
- Bjarne Stroustrup,The C++ Programming Language ISBN 0201889544。由 C++ 的创造者编写,它涵盖了从核心语言到标准库的一切内容。本书本身超过 1300 页。