首页 > TAG信息列表 > virtual-functions

我需要有关“ this”关键字和继承的帮助

abstract class BaseClass { public virtual void Accept(IVisitor visitor) { visitor.Visit(this); } } class DerivedClass: BaseClass { } interface IVisitor { void Visit(BaseClass baseEntity); void Visit(DerivedClass derivedEntity

c-演员

我实际上想做的是在this question中将构造好的moneypunct转换为punct_facet,而不像this answer那样编写副本构造函数. 但是出于编写Minimal, Complete, Verifiable Example的利益,我们可以说我有以下两个类: class Parent{ public: Parent(Complex& args); Parent operator

如何使用虚函数实现C语言中的多态行为?

我是C的这些重要功能的新手,我已经在这里阅读了有关这些主题的一些问题/答案,并在Google上搜索了一些文档.但是我仍然对此感到困惑… 如果有人可以建议我一些不错的在线教程或书籍章节,这将使这些概念变得简单而又缓慢,并从基础开始,那将是很好的. 另外,如果有人知道一些手边的练习

如果将虚函数或非虚函数添加到C的基类中,是否必须重新编译整个类层次结构?

我试图了解一个类的vtable在C语言中的敏感程度,为此,我需要了解对于下面列出的3个变更场景是否需要重新编译整个类层次结构(总共3个头文件).首先,这是我的班级层次结构: class A { public: virtual void method1() = 0; virtual void method2() = 0; virtual ~A() {}

覆盖具有多个签名的C虚拟方法

这个问题已经在这里有了答案:            >            Why does an overridden function in the derived class hide other overloads of the base class?                                    4个 我有一个C基类,它

c-从基类指针调用派生类非虚拟成员函数

我们知道,可以通过C中的基类指针访问派生类成员函数,前提是这些成员函数必须是虚拟的.有没有一种方法可以从基类指针访问派生的类成员函数,而这些成员函数不是虚拟的也不是纯虚拟的. 即我想调用仅在派生类&中存在的派生类成员函数.通过基类指针不在基类中.我将如何实现? 例如,如果我

c – 从不同的基类重载同名的虚函数.可能吗?

参见英文答案 > C++ virtual override functions with same name                                    4个 标题可能令人困惑. 假设我们有以下设置; class A { public: virtual void fn() = 0; }; class B { public: virtual int fn

c – Boost包装虚拟方法的python

我正在使用boost python来创建与c库的绑定.该库中的许多类都有虚方法,它们接受iterator / const_iterator类型作为参数.我并不特别希望公开这些类型,但更愿意围绕这些接受适当容器的虚拟方法创建一些包装器.我的问题是,在“默认实现”功能中进行此包装是否安全? 例如 class Test {

java – 虚拟表/调度表

根据我所知的CPP,每个班级都有自己的vtable. 但是this维基百科链接提到: An object’s dispatch table will contain the addresses of the object’s dynamically bound methods. Method calls are performed by fetching the method’s address from the object’s d

c – 使用智能指针返回类型协方差

在C中我们可以这样做: struct Base { virtual Base* Clone() const { ... } virtual ~Base(){} }; struct Derived : Base { virtual Derived* Clone() const {...} //overrides Base::Clone }; 但是,以下内容不会做同样的伎俩: struct Base { virtual shared_ptr<Ba

c – 覆盖虚拟功能和隐藏非虚拟功能有什么区别?

给定以下代码片段,函数调用有何不同?什么是隐藏功能?什么是功能重写?它们如何与函数重载相关?两者有什么区别?我在一个地方找不到这些的好描述,所以我在这里问我所以我可以巩固这些信息. class Parent { public: void doA() { cout << "doA in Parent" << endl; } virtual vo

使用C中的私有函数覆盖公共虚拟函数

是否有任何理由使重写的C虚函数的权限与基类不同?这样做有危险吗? 例如: class base { public: virtual int foo(double) = 0; } class child : public base { private: virtual int foo(double); } C++ faq说这是一个坏主意,但没有说明原因. 我已经在一些

为什么我们需要C中的虚函数?

我正在学习C而我正在进入虚拟功能. 根据我的阅读(在书中和在线),虚函数是基类中的函数,您可以在派生类中重写它们. 但是在本书前面,当学习基本继承时,我能够在不使用虚拟的情况下覆盖派生类中的基本函数. 那我在这里错过了什么?我知道虚拟功能还有更多功能,而且它似乎很重要,所以我

C将私有纯虚方法覆盖为public

为什么会这样? http://coliru.stacked-crooked.com/a/e1376beff0c157a1 class Base{ private: virtual void do_run() = 0; public: void run(){ do_run(); } }; class A : public Base { public: // uplift ?? virtual void do_run() override {} };

c – 为什么使用虚拟表而不是函数指针?

我是C的初学者,我无法理解为什么C使用虚拟表来实现多态而不是简单的函数指针. 我们来看一个例子: struct Shape { virtual double area() = 0; }; struct Square: public Shape { virtual double area(); /* ... */ }; struct Circle: public Shape { virtual do

在C中调用虚函数的时间复杂度

假设具有类型Base的继承层次结构具有F个虚函数,D个不同的派生类型,并假设每个派生类型都覆盖所有虚函数. 为Base *类型的指针p调用其中一个虚函数的时间复杂度是多少? 另外,如果总共有O个对象(在类型之间平均分配)并且所有对象具有相同的数据成员,那么系统的空间复杂性是多少?解决方

c – 从类模板实现纯虚函数 – 参数类型

我想创建一个抽象类模板,强制所有实例使用纯虚函数实现doStuff函数. 我有以下模板: template<class T> class X { public: X() {}; virtual ~X() {}; virtual X<T>& doStuff(X<T>& x) = 0; }; 并且T = int的实例: class Y : public X<int> { pub

C Pimpl与纯虚拟接口性能

我知道有很多关于这个主题的帖子,但我很难找到这个问题的答案. 对于更快的函数调用,纯虚拟接口还是pimpl? 乍一看,在我看来,纯虚拟接口会更快,因为使用pimpl将花费两个函数调用而不是一个…或者在这种情况下某些聪明的编译器技巧会接管吗? 编辑: 我试图决定我应该使用哪些来抽象出几个

c – 虚拟构造函数习语和工厂设计

在虚拟构造函数中,有虚函数,它使用虚函数返回对象的新对象或副本.但是,要以多态方式调用这些虚函数,必须使用实际构造函数创建该类的对象. 在设计模式上下文中,它意味着在使用多态对象创建方式之前,客户端是否知道对象的类型?解决方法:客户不一定要了解具体类型.例如,考虑以下层次结

c – 虚拟函数调用的优化

我有一个关于虚函数调用优化的问题.我已经阅读了某个地方(问题是我现在找不到文章)可能有可能通过使用类似于此的构造来优化掉v-table查找: // Base.h class Base { public: virtual void Foo() = 0; }; // Concrete.h class Concrete : public Base { public: virtual vo

c – 是现代g编译器解决的vtable错误的未定义引用?

根据this虚函数必须定义,否则链接器抱怨&报告错误“未定义引用vtable”,但为什么ideone编译器没有为以下代码提供任何错误? #include <iostream> using namespace std; class Test { public: Test() { cout<<"test() is called\n"; } virtual void tes

c – 是否可以覆盖(隐藏)非虚方法,但仍然可以从子类中显式调用它?

是否可以覆盖(隐藏)非虚方法,但仍然可以从子类中显式调用它? It works但我不知道它是特定于编译器还是应该因某种原因而避免. (我没想到它会根据“隐藏”功能的术语而起作用.) class A { public: void foo() { cout << "A::foo()" << endl; } }; class B : pu

多级继承C.

假设一个C类继承自B类,它覆盖了A中定义的虚函数.C不会覆盖该函数.当类型A *的指针指向类型C的对象时,函数调用是否会使用B中的重写版本?解决方法:是! 从语义上讲,C隐式地从B继承其实现. 具体地说,被调用的虚函数的实现是最可用的.

c – 覆盖非虚拟功能和虚拟功能有什么区别?

在C:覆盖非虚拟功能和覆盖虚拟功能有什么区别?解决方法:使用虚拟: class Base { virtual void Foo() { std::cout << "Foo in Base" << std::endl;} }; class Derived : public Base { virtual void Foo() { std::cout << "Foo in Derived" << std:

c – 从另一个虚拟函数调用时的内联虚函数?

我有一个包含两个虚拟成员函数的类:foo和wrapper. foo简短而快速,包装器包含一个多次调用foo的循环.我希望有一些方法可以在包装器函数内部调用foo,即使是从指向对象的指针调用时: MyClass *obj = getObject(); obj->foo(); // As I understand it, this cannot be inlined. That's