::
::
在C++
中表示作用域,和所属关系。
::
是运算符中等级最高的,它分为三种,分别如下:
作用域符号:
作用域符号::
的前面一般是类名称,后面一般是该类的成员名称,C++
为例避免不同的类有名称相同的成员而采用作用域的方式进行区分。
例如:A
,B
表示两个类,在 A
,B
中都有成员 member
。
那么:
- 1、
A::member
就表示类A
中的成员member
。 - 2、
B::member
就表示类B
中的成员member
。
全局作用域符号:
全局作用域符号::
当全局变量在局部函数中与其中某个变量重名,那么就可以用 ::
来区分,例如:
char zhou; //全局变量
void sleep()
{
char zhou; //全局变量
char(局部变量) = char(局部变量)*char(局部变量);
::char(全局变量) =::(全局变量) *char(全局变量)
}
作用域分解运算符:
::
是 C++ 里的作用域分解运算符,“比如声明了一个类A
,类A
里声明了一个成员函数 void f()
,但没有在类的声明里给出f的定义,那么在类外定义 f 时,就要写成 voidA::f()
,表示这个 f()
函数是类 A 的成员函数。例如:
class CA
{
public:
int ca_var;
int add(int a, int b);
int add(int a);
}
//那么在实现这个函数时,必须这样写:
int CA::add(int a, int b)
{
return a + b;
}
//另外,双冒号也常常用于在类变量内部作为当前类实例的元素进行表示,比如:
int CA::add(int a)
{
return a + ::ca_var;
}
//表示当前类实例中的变量ca_var。
C++ 简介
C++
是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。
C++
被认为是一种中级语言,它综合了高级语言和低级语言的特点。
C++
是由 Bjarne Stroustrup
于 1979 年在新泽西州美利山贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,最初命名为带类的C,后来在 1983 年更名为 C++。
C++
是 C
的一个超集,事实上,任何合法的C
程序都是合法的 C++
程序。
注意:使用静态类型的编程语言是在编译时执行类型检查,而不是在运行时执行类型检查。
面向对象程序设计
C++ 完全支持面向对象的程序设计,包括面向对象开发的四大特性:
- 封装
- 抽象
- 继承
- 多态
标准库
标准的C++
由三个重要部分组成:
- 核心语言,提供了所有构件块,包括变量、数据类型和常量,等等。
- C++ 标准库,提供了大量的函数,用于操作文件、字符串等。
- 标准模板库(STL),提供了大量的方法,用于操作数据结构等。
C++ 基本语法
C++
程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。
对象 - 对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃。对象是类的实例。
类 - 类可以定义为描述对象行为/状态的模板/蓝图。
方法 - 从基本上说,一个方法表示一种行为。一个类可以包含多个方法。可以在方法中写入逻辑、操作数据以及执行所有的动作。
即时变量 - 每个对象都有其独特的即时变量。对象的状态是由这些即时变量的值创建的。
C++ 标识符
C++
标识符是用来标识变量、函数、类、模块,或任何其他用户自定义项目的名称。
一个标识符以字母A-Z
或 a-z
或下划线 _
开始,后跟零个或多个字母、下划线和数字(0-9)。
C++
标识符内不允许出现标点字符,比如@
、&
和%
。C++
是区分大小写的编程语言。
C/C++可以使用带有$
的标识符:
#include "stdio.h"
int main(){
int _2a$=0x99;
printf("%d\n",_2a$);
return 0;
}
$
可以放在前面:
#include "stdio.h"
int main(){
int $a=0x99;
printf("%d\n",$a);
return 0;
}
甚至是:
#include "stdio.h"
int main(){
int $8=0x99;
printf("%d\n", $8);
return 0;
}
三字符组
三字符组就是用于表示另一个字符的三个字符序列,又称为三字符序列。三字符序列总是以两个问号开头。
三字符序列不太常见,但 C++ 标准允许把某些字符指定为三字符序列。以前为了表示键盘上没有的字符,这是必不可少的一种方法。
三字符序列可以出现在任何地方,包括字符串、字符序列、注释和预处理指令。
下面列出了最常用的三字符序列:
三字符组 | 替换 |
---|---|
??= | # |
??/ | \ |
??’ | ^ |
??( | [ |
??) | ] |
??! | |
??< | { |
??> | } |
??- | ~ |
如果希望在源程序中有两个连续的问号,且不希望被预处理器替换,这种情况出现在字符常量、字符串字面值或者是程序注释中,可选办法是用字符串的自动连接:"...?""?..."
或者转义序列:"...?\?..."
。
从Microsoft Visual C++ 2010版开始,该编译器默认不再自动替换三字符组。如果需要使用三字符组替换(如为了兼容古老的软件代码),需要设置编译器命令行选项/Zc:trigraphs
g++仍默认支持三字符组,但会给出编译警告。
嵌套注释
块注释符(/*...*/
)是不可以嵌套使用的。但可以在一种注释内嵌套另一种注释。
/* 用于输出 Hello World 的注释
cout << "Hello World"; // 输出 Hello World
*/
此外,我们还可以使用·#if 0 ... #endif
来实现注释,且可以实现嵌套,格式为:
#if 0
code
#endif
也可以把#if 0
改成 #if 1
来执行 code
的代码。
这种形式对程序调试也可以帮助,测试时使用 #if 1
来执行测试代码,发布后使用 #if 0
来屏蔽测试代码。
#if
后可以是任意的条件语句。
下面的代码如果 condition
条件为true
执行 code1
,否则执行 code2
。
#if condition
code1
#else
code2
#endif