结构体
在C++中,创建结构体变量时,关键字struct可以省略,但是在C语言中,创建结构体变量时需要显式地使用struct关键字。
例如,以下代码演示了在C++中创建结构体变量时可以省略struct关键字:
// C++ 中可以省略 struct 关键字
#include <iostream>
struct Point {
int x;
int y;
};
int main() {
Point pt; // 等价于 struct Point pt;
pt.x = 10;
pt.y = 20;
std::cout << "pt.x = " << pt.x << ", pt.y = " << pt.y << std::endl;
return 0;
}
而在C语言中创建结构体变量时,需要使用struct关键字声明:
// C 中需要使用 struct 关键字
#include <stdio.h>
struct Point {
int x;
int y;
};
int main() {
struct Point pt;
pt.x = 10;
pt.y = 20;
printf("pt.x = %d, pt.y = %d\n", pt.x, pt.y);
return 0;
}
所以,在C语言中创建结构体变量时,需要显式地使用struct关键字。
C语言和C++在控制台输入输出的区别
C语言与C++在控制台输出方面的主要区别在于:
1.输入/输出头文件的名称不同:在C语言中,使用<stdio.h>头文件进行标准输入/输出操作,但在C++中,使用头文件进行输入/输出操作。
2.流操作符的使用:C++中引入了流操作符“<<”和“>>”用于输入/输出数据,而C语言则使用printf()和scanf()等函数进行输入/输出数据。
3.输出格式控制符的差异:C语言中的输出格式控制符(如%d,%f等)与C++中的有所不同,例如C++中可以使用endl控制输出换行,而C语言中使用“\n”控制换行。
4.C++中引入了所谓的“命名空间”(namespace)的概念,为不同的库和类提供独立的作用域,避免了名称冲突的问题,使得代码更加规范和易于维护。
C++在命名空间上的优势
在C++中,一个命名空间(namespace)
可以看作是一个作用域的集合,可以用来区分不同库、不同项目或不同模块中的相同名称的函数、变量、类、结构体等。命名空间中的名称在其作用域内具有唯一性,避免不同模块或库之间的同名冲突。
具体来说,命名空间可以在全局范围内定义,而且命名空间可以包含其他命名空间,从而形成层次结构。一个命名空间需要使用namespace关键字进行定义,其基本语法如下:
namespace namespace_name {
//特定的声明:
int x;
void func();
class MyClass{};
}
当定义了一个命名空间之后,其中的声明可以通过“::”运算符来访问,例如namespace_name::x
、namespace_name::func()
、namespace_name::MyClass
等。如果定义了一个全局的变量或函数,可以显式地指定命名空间外面的全局作用域,例如::x
、::func()
等。
通过使用命名空间,可以帮助我们更好地组织代码,防止不同模块之间的命名冲突,提高程序的可维护性和可读性。命名空间不仅常见于标准库,而且也可以在自己的项目中使用命名空间来组织代码,这是C++相比于C语言的一个非常重要的优势。
C++的string
在C语言中,没有string类型,字符串通常是通过字符数组来处理的。而在C++中,引入了string类型,为处理和操作字符串提供了更高效和更方便的方式。
C++中的string类是一个完整的字符串处理类型,内部实现为一个动态数组,可以自动地管理内存,方便地扩展和收缩字符串的长度。string类提供了许多内置的成员函数,例如插入、删除、查找、截取、替换、比较字符串等操作,也可以像普通数组那样直接通过索引访问单个字符。
相比于C语言中的字符数组和字符串处理函数(如strcpy()、strcat()、strlen()等),C++中的string类型提供了以下优势:
-
内置动态内存管理:string类自动处理内存分配和释放,避免了手动内存管理的繁琐和错误,也避免了内存泄漏和越界访问等问题。
-
方便的字符串操作:string类提供了丰富的字符串操作方法,例如substr()、erase()、insert()、replace()、find()、compare()等等,可以方便地实现各种字符串操作。
-
安全性:与C语言中的字符数组相比,使用string类型可以更好地保障安全性,防止缓冲区溢出等问题。
-
风格简洁:使用string类型可以让代码看起来更加简洁和易于阅读和维护。
综上所述,C++中的string类型比C语言中的字符数组和字符串处理函数更加方便、高效和安全,因此在C++中常被广泛使用。
在对C++面向过程的基础部分学习中,感觉上90%的内容和C语言相似,因此这部分的内容不再单独做学习笔记。后面将重点学习C++的核心部分。