C++使用::运算符搞定很多东西,其中最基本的一个用处就是用来决议多继承中的重名成员。::运算符的本质是:左操作数是一个scope,右操作数是这个scope内的名字,可以是scope,class,member或者function,variable等等,从左操作数指定的scope中找到有操作数这个实体。看起来非常优雅,不是么?可是,它有好几个缺陷。
一、现实的常见的缺陷。分散在代码中,一旦改变会引起很多地方同时都需要改。其实这就是决策不能集中作出的一个典型现象。
二、理论上的缺陷一。它丧失了虚拟性也就是多态性。这个问题说小也小说大也大,如果你就想静态调用,那么ok,非常好。如果我们需要多态性,那么对不起,不可能了。但是对于虚函数,我们一般期待的多态性。
三、理论上的缺陷二。它主要体现在using语句中,我们知道,using可以引入一个名字,一个别的scope(主要是命名空间)中的名字,当然,也可以在子类中引用父类的名字以改变访问级别。这个行为的一个缺陷是引入了所有overload的名字,你不能引入部分实体。这在实践中一般没有问题,但是,一旦有了问题就非常难绕开。
分享到:
相关推荐
- **类作用域中的类型名**: 在类的作用域内定义的新类型。 - **多重继承**: 一个类可以从多个基类继承。 - **控制对类成员的访问**: 使用访问修饰符来限制对类成员的访问。 ### 总结 华为内部C++培训教材涵盖了从...
1. **命名空间(namespace)**:用于避免全局作用域中的名称冲突。 2. **类名(Class names)**:定义类的标识符。 3. **类成员(Class members)**:包括数据成员和成员函数。 4. **成员函数(Member Functions)**...
类名称、成员变量、成员函数(包括普通成员函数和静态成员函数)、联合体(Union)、位域(Bit Fields)、嵌套类声明、类型名在类作用域内的定义、多重继承、虚函数、抽象类以及控制类成员访问权限(private、...
- **基本概念**:讲解了C++中的命名空间(namespace),类名,类成员(包括成员函数、静态成员函数、联合体(unions)、位字段(bit fields)、嵌套类声明(nested class declarations)以及在类作用域内的类型名。...
- **堆上**:通过动态内存分配在运行时从堆中获取存储空间,这种方式可以随时分配和释放内存,并且不受作用域限制。 #### 12.1.1 C 从堆中获取存储单元的方法 C语言提供了几个标准库函数用于动态内存管理,包括: ...
- **函数重载**: 允许在同一个作用域内定义多个同名函数,只要它们的参数列表不同即可。 - **示例**: `void func(int x);` 和 `void func(double x);` - **运算符重载**: 允许用户定义自己的运算符行为。C++支持对...
C++中的指针操作、作用域规则、异常处理等都是常见的语法陷阱。例如,忘记初始化指针可能导致空指针引用,不正确的异常处理可能导致程序崩溃。理解并正确使用这些特性至关重要。 "语义陷阱"涉及到程序的实际运行...
1. **基础语法**:指针、引用、数据类型、运算符重载、作用域规则。 2. **类与对象**:封装、继承、多态性,以及虚函数和纯虚函数的应用。 3. **STL(标准模板库)**:容器(如vector、list、set、map等)、迭代器、...
函数重载允许在同一作用域内使用相同名称的函数,但参数列表不同,以实现不同的功能。编译器根据传入的参数类型和数量来选择正确的函数。 2. **运算符重载** 运算符重载是C++的一个独特特性,允许自定义运算符的...
当`auto_ptr`对象离开作用域(通常是函数结束时),其析构函数会自动调用`delete`来释放绑定的内存。这种机制使得程序员无需手动管理内存,降低了因忘记释放内存而引发的潜在问题。 在C++中,`<memory>`头文件包含...
- SymbolDatabase:进行语义分析,构建符号表,记录变量、函数和作用域信息。 - Cppcheck:调用所有注册的检查类,进行缺陷检测。 - ErrorLogger:输出存在的缺陷警告,提供定位信息。 3. **核心类Cppcheck**:...
2.11 了解存储时间和作用域 74 2.11.1 自动变量 74 2.11.2 决定变量声明的位置 76 2.11.3 全局变量 77 2.11.4 静态变量 80 2.12 名称空间 80 2.12.1 声明名称空间 81 2.12.2 多个名称空间 82 2.13 C++/CLI...
类作用域内的类型名称(type names in class scope),多重基类(multiple base classes),虚函数(virtual functions),抽象类(abstract classes),以及控制对类成员的访问权限(access specifiers for base ...
- **理解声明**:C语言的声明语法有时会导致困惑,正确理解变量类型和作用域至关重要。 - **运算符优先级**:不同的运算符有不同的优先级,不熟悉这些规则可能导致计算结果不符合预期。 - **分号的使用**:分号在...
- **类型名(Type Names)**:在类作用域内定义的自定义类型。 - **多继承(Multiple Base Classes)**:一个类可以从多个基类继承特性。 - **虚函数(Virtual Functions)**:实现动态绑定和多态性。 - **抽象...
- **静态变量、全局变量、类的成员变量的前缀**:通过前缀区分不同作用域的变量,如 `s_` 表示静态变量,`g_` 表示全局变量。 #### 表达式与基本语句 - **运算符的优先级**:确保理解并正确使用各种运算符的优先级...