软件工程师手册/语言词典/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;
标准模板库包含各种容器,包括 vector、bit-set、list、map 和 multi-set。
标准模板库包含各种算法,包括 sort、remove_if 和 find_if。
垃圾回收是手动的。
通常,接口定义在头文件中,通常为 *.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 页。