`
kmplayer
  • 浏览: 508665 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于C++的名字查找规则

阅读更多
1,总结一句话:由内向外,找到合适的即刻停止。

实例代码:
#include <iostream>
using namespace std;

class A
{
public:
    virtual ~A() {}
    virtual void f()
    {
        cout << "A::f\n";
    }
};

class B : virtual public A //虚继承,防止f产生二义性
{
public:
    void f()
    {
        cout << "B::f\n";
    }
};

class C : public B, virtual public A {};

int main()
{
    A* p = new C;
    p->f(); // Calls B::f()
    //注:由于B是A的子类,因此按照名字作用域查找规则,B的优先级高于A
    delete p;
}
分享到:
评论

相关推荐

    exceptional c++:47个c++工程难题、编程问题和解决方案(英文版)

    条款31:名字查找与接口规则——之一 148 条款32:名字查找与接口规则——之二 152 条款33:名字查找和接口规则——之三 162 条款34:名字查找与接口规则——之四 167 6 内存管理 176 条款35:内存管理——之一...

    C++模板二段名字查找方法

    C++模板的二段名字查找(Two-Phase Name Lookup)是一种特定于模板的名称解析机制,它是C++标准为了处理模板特化和依赖性解析而引入的重要规则。这个过程分为两个阶段:模板定义阶段和模板实例化阶段。 1. **模板...

    c++学习路径

    进阶部分包括对象内存布局、模板和名字查找规则。模板是C++的一个强大工具,但也是复杂的,你需要理解偏特化、非类型模板参数、模板参数推导、实例化和二段式名字查找等概念。同时,深入学习C++的名字查找和绑定规则...

    浅谈C++继承中的名字查找

    C++的名字查找规则遵循以下原则: 1. **静态类型决定可见性**:一个对象、引用或指针的静态类型决定了可以访问哪些成员。在上述例子中,`d`的静态类型是`Derived`,因此默认只能访问`Derived`类及其基类`Base`中的...

    C++编程规范关于C++编程要注意的细节

    本文档详细介绍了C++编程的各种规范和最佳实践,包括文件结构、程序版式、命名规则、表达式与基本语句、常量、函数设计、内存管理、函数高级特性、构造函数与析构函数、继承与组合以及其他编程经验。遵循这些指南...

    学习C++:实践者的方法

    4. **名字查找**:C++的名字查找规则涉及到作用域、链接性和可见性。理解命名空间(namespace)、类作用域(class scope)和全局作用域(global scope)的查找规则,以及`using`声明和指令的作用,是编写清晰代码的...

    Exceptional C++中文版

    - 不同作用域中的名字查找规则。 - 重载解析:如何选择最合适的函数。 2. **名字空间**: - 名字空间的作用:解决命名冲突问题。 - 名字空间的使用技巧:使用`using`指令简化命名。 3. **接口设计**: - 如何...

    C++ 14标准草案

    - **名字查找**:描述了如何在不同的作用域内查找标识符的过程。 - **程序与链接**:讨论了程序的不同部分如何通过链接形成一个完整的可执行文件。 - **启动与终止**:介绍了程序启动时的初始化流程以及程序结束时的...

    C++标准规范

    此外,标准中对多线程执行、数据竞争、标准转换、表达式解析、作用域、名字查找等进行了深入的规范,体现了C++语言的丰富特性和精确控制能力。 具体来说,文档结构方面提及了如下几个重要部分: 1. 作用域(Scope...

    dlopen加载c++ 函数及类

    总之,`dlopen`加载C++函数和类涉及到C++的命名规则、动态链接库原理、虚函数表以及C/C++接口设计等多个方面的知识。理解和掌握这些知识点,对于进行跨进程通信、插件开发或者框架设计等工作都是至关重要的。

    c++promer(第四版)

    《C++ Primer(第四版)》是一本深受程序员喜爱的C++编程教程,它涵盖了C++语言的基础到高级概念,适合初学...如果想要完整版的C++ Primer(第四版),可以查找提供者分享的11章及以后的内容,以获得更全面的知识覆盖。

    c++ standard library

    C++中名称查找规则相当复杂,涉及作用域、模板和宏等。 - 存储期限(storage duration)和对象生命周期(object lifetime)是管理对象在程序中存活时间的重要概念。C++中主要有静态存储期限、线程存储期限、自动...

    Inside the C++ Object Model

    6. **名字查找与作用域**:C++的名字查找规则是理解和避免命名冲突的关键。书中详细阐述了不同上下文下的名字查找行为,如局部、全局、类成员和嵌套作用域。 7. **异常处理**:C++的异常处理机制允许程序在运行时...

    c++常用指令.rar

    1. **C++字符串(string)**:在**C++中string的详解.doc**文档中,详细解析了C++中的`std::string`类,包括字符串的创建、操作(如拼接、截取、查找、替换)以及与字符数组之间的转换。理解字符串对象的动态内存管理...

    C++.Templates.-.The Complete.Guide(侯捷译)

    3. **Looking Up Names in Templates(在模板中查找名称)**:描述了如何在模板上下文中查找标识符,涉及到作用域和名字解析规则。 4. **Templates Instantiation(模板实例化)**:当模板被实际使用时,编译器如何...

    inside the c++ object model

    9. **名字查找与链接**:C++的名字查找规则(如Koenig查找)和链接过程是理解程序编译与链接时错误的关键。书中详细分析了这些过程,有助于编写更健壮的代码。 10. **STL与标准库**:虽然书名并未直接提及STL,但...

    C++ 人品计算器

    首先,我们要明白“人品计算器”是一个趣味性的程序,它通常会随机生成一个数字,然后根据一定的规则赋予这个数字特定的含义,比如“人品爆棚”或“人品欠费”,以娱乐用户。在C++中实现这样的程序,我们需要掌握...

    C++日常笔记

    例如,`#ifdef __cplusplus`用于检查是否在C++环境中,然后在头文件中使用`extern "C"`包裹C函数的声明,确保链接时的名字不被C++编译器改变。 6. 内存分配: - 只读数据区:存放常量和文本字符串,如`const char* ...

Global site tag (gtag.js) - Google Analytics