目录
C++是在C语言基础上开发的一种集面向对象编程(OOP)、通用编程和传统的过程化编程于一体的编程语言。本书是根据2003年的ISO/ANSI C++标准编写的,通过大量短小精悍的程序详细而全面地阐述了C++的基本概念和技术。
全书分17章和10个附录,分别介绍了C++程序的运行方式、基本数据类型、复合数据类型、循环和关系表达式、分支语句和逻辑操作符、函数重载和函数模板、内存模型和名称空间、类的设计和使用、多态、虚函数、动态内存分配、继承、代码重用、友元、异常处理技术、string类和标准模板库、输入/输出等内容。
C++ 语句的例子:
std::cout << "Hello, World!" << std::endl;
这个语句的作用是在控制台输出 "Hello, World!",并换行。
int num = 10;
这个语句的作用是定义一个名为 num 的整型变量,并初始化为 10。
if (num > 0) {
std::cout << "num is positive" << std::endl;
} else if (num < 0) {
std::cout << "num is negative" << std::endl;
} else {
std::cout << "num is zero" << std::endl;
}
这个语句的作用是根据 num 的值输出不同的信息。如果 num 大于 0,则输出 "num is positive",如果 num 小于 0,则输出 "num is negative",否则输出 "num is zero"。
for (int i = 0; i < 10; i++) {
std::cout << i << std::endl;
}
这个语句的作用是循环输出从 0 到 9 的数字。
int add(int a, int b) {
return a + b;
}
这个语句的作用是定义一个名为 add 的函数,它接受两个整型参数 a 和 b,并返回它们的和。
在 C++ 中,声明语句用于告诉编译器变量或函数的名称和类型,但不分配内存空间,变量则是用来存储数据的内存区域。以下是关于声明语句和变量的一些基本知识:
我们可以使用以下语法来声明变量:
type variable_name;
其中,type 表示变量的数据类型,variable_name 表示变量的名称。例如:
int x; // 声明一个整型变量 x
double y; // 声明一个双精度浮点数变量 y
char z; // 声明一个字符型变量 z
bool flag; // 声明一个布尔型变量 flag
变量声明后,我们可以使用以下语法对变量进行初始化:
type variable_name = value;
其中,value 表示变量的初始值。例如:
int x = 5; // 声明并初始化一个整型变量 x
double y = 3.14; // 声明并初始化一个双精度浮点数变量 y
char z = 'a'; // 声明并初始化一个字符型变量 z
bool flag = true; // 声明并初始化一个布尔型变量 flag
我们可以在同一行中声明多个相同类型的变量或初始化多个变量。例如:
int a, b, c; // 声明三个整型变量 a, b, c
int x = 1, y = 2, z = 3; // 声明并初始化三个整型变量 x, y, z
如果我们在一个源文件中声明一个变量,然后在另一个源文件中使用该变量,需要在使用的源文件中使用 extern 关键字声明该变量。例如:
// file1.cpp
int x = 10; // 声明并初始化一个整型变量 x
// file2.cpp
extern int x; // 声明变量 x,表示 x 是在其他源文件中定义的
int y = x + 5; // 使用变量 x 的值进行计算
在上述代码中,我们在 file1.cpp 中声明并初始化了一个整型变量 x,然后在 file2.cpp 中使用该变量,因此需要使用 extern 关键字在 file2.cpp 中声明该变量。
在 C++ 中,变量必须先声明后使用。这是因为变量是用来存储数据的内存区域,编译器需要知道该变量的名称、类型以及占用的内存空间大小等信息,才能够在程序运行时正确地分配内存空间,以便存储数据。如果在使用变量之前没有进行声明,那么编译器就无法知道该变量的信息,也就无法分配内存空间,程序就会出现错误。
另外,变量的声明还可以帮助程序员更好地理解代码,避免出现一些难以发现的错误。例如,在大型程序中,如果没有对每个变量进行明确的声明,就可能会出现多个变量使用同一个名称的情况,这会导致程序的行为不可预期,难以排查错误。
因此,在 C++ 中,变量必须先进行声明后使用,这是为了保证程序的正确性和可读性。
在 C++ 中,赋值语句用于将一个值赋给变量。赋值语句使用赋值操作符 "=" 来表示。以下是关于赋值语句的基本知识:
最常见的赋值操作是将一个值赋给一个变量。例如:
int x; // 声明一个整型变量 x
x = 5; // 将值 5 赋给变量 x
C++ 支持同时对多个变量进行赋值。
例如:
int a, b, c;
a = b = c = 10; // 将值 10 赋给变量 a, b, c
C++ 还提供了一些复合赋值操作符,可以将赋值与其他运算符结合起来。例如:
int x = 5;
x += 3; // 等价于 x = x + 3,将 x 的值加上 3 并赋给 x
x -= 2; // 等价于 x = x - 2,将 x 的值减去 2 并赋给 x
x *= 4; // 等价于 x = x * 4,将 x 的值乘以 4 并赋给 x
x /= 2; // 等价于 x = x / 2,将 x 的值除以 2 并赋给 x
C++ 还提供了自增和自减操作符,可以方便地对变量进行加一或减一的操作。例如:
int x = 5;
x++; // 将 x 的值加一
x--; // 将 x 的值减一
在 C++11 中,还引入了右值引用(Rvalue reference)和移动语义(Move semantics),使得对于临时对象等右值能够进行高效的赋值操作。
例如:
int x = 5;
int&& y = std::move(x); // 将 x 的值移动给 y
以上是关于赋值语句的基本知识,通过赋值语句,我们可以将一个值赋给一个变量,或者进行复合赋值操作,使得程序可以进行数据的存储和处理。
是一种用户定义的数据类型,用于封装数据和相关的操作。类提供了一种面向对象的编程方式,通过定义成员变量和成员函数,可以创建具有特定属性和行为的对象。
以下是关于 C++ 类的基本知识:
类的声明包含在头文件(.h 或 .hpp)中,用于描述类的名称、成员变量和成员函数的原型。类的定义则包含在源文件(.cpp)中,用于实现成员函数的具体代码。例如:
// MyClass.h
class MyClass {
private:
int myVariable;
public:
void setMyVariable(int value);
int getMyVariable();
};
// MyClass.cpp
void MyClass::setMyVariable(int value) {
myVariable = value;
}
int MyClass::getMyVariable() {
return myVariable;
}
通过类可以创建对象,对象是类的实例化结果。使用类名和构造函数可以创建对象。例如:
MyClass obj; // 创建 MyClass 类的对象 obj
obj.setMyVariable(42); // 使用对象的成员函数进行操作
int value = obj.getMyVariable(); // 使用对象的成员函数获取数据
成员变量和成员函数: 类中的成员变量用于存储对象的数据,成员函数用于操作和处理数据。成员变量和成员函数可以分为私有(private)、公有(public)和保护(protected)三种访问权限。例如:
class MyClass {
private:
int privateVariable; // 私有成员变量
public:
int publicVariable; // 公有成员变量
private:
void privateFunction(); // 私有成员函数
public:
void publicFunction(); // 公有成员函数
};
类可以定义构造函数和析构函数,构造函数在对象创建时被调用,用于初始化对象的数据;析构函数在对象销毁时被调用,用于释放对象占用的资源。例如:
class MyClass {
public:
MyClass(); // 构造函数的声明
~MyClass(); // 析构函数的声明
};
MyClass::MyClass() {
// 构造函数的定义
}
MyClass::~MyClass() {
// 析构函数的定义
}
类中还可以定义静态成员,静态成员属于类本身而不是对象,可以在不创建对象的情况下直接访问。例如:
class MyClass {
public:
static int staticVariable; // 静态成员变量
public:
static void staticFunction(); // 静态成员函数
};
int MyClass::staticVariable = 0; // 静态成员变量的定义和初始化
void MyClass::staticFunction() {
// 静态成员函数的定义
}
以上是关于 C++ 类的基本知识,通过类可以定义对象和操作数据,实现更加灵活和模块化的程序设计。
C++ 函数是一段可重用的代码块,用于执行特定的任务。函数可以接受参数、执行操作,并返回一个值(或者可以是 void 类型,即不返回任何值)。
以下是关于 C++ 函数的基本知识:
函数的声明包含在函数原型中,用于描述函数的名称、参数列表和返回类型。函数的定义则包含在源文件中,用于实现函数的具体代码。例如:
// 函数的声明
int sum(int a, int b);
// 函数的定义
int sum(int a, int b) {
return a + b;
}
函数可以通过函数名和传递给函数的参数来调用。例如:
int result = sum(3, 4); // 调用 sum 函数,并将返回值赋给 result
函数可以接受参数,参数用于向函数传递数据。参数可以是值传递、引用传递或指针传递。例如:
// 值传递
int square(int num) {
return num * num;
}
// 引用传递
void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
// 指针传递
void increment(int* num) {
(*num)++;
}
C++ 支持函数重载,即可以有多个同名的函数,但它们的参数个数、类型或顺序必须不同。编译器根据传递给函数的参数决定调用哪个函数。例如:
int sum(int a, int b) {
return a + b;
}
float sum(float a, float b) {
return a + b;
}
函数可以返回一个值,返回值的类型在函数声明和定义中指定。如果函数不返回任何值,可以使用 void 类型。例如:
int square(int num) {
return num * num;
}
void printHello() {
cout << "Hello!" << endl;
}
C++ 函数可以是递归的,即函数内部调用自身。递归函数通常需要有一个终止条件,以避免无限递归。例如:
// 计算阶乘
int factorial(int n) {
if (n == 0 || n == 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
C++ 提供了内联函数(inline function),它们在编译时会被直接插入到调用点处,而不是通过函数调用来执行。内联函数适用于简单且频繁调用的函数。例如:
inline int square(int num) {
return num * num;
}