Questions tagged [virtual-functions]

22 questions
64
votes
8 answers

When NOT to use virtual destructors?

I believed I searched many times about virtual destructors, most mention the purpose of virtual destructors, and why you need virtual destructors. Also I think in most cases destructors need to be virtual. Then the question is: Why doesn't c++ set…
ggrr
  • 5,725
  • 11
  • 35
  • 37
33
votes
1 answer

Why does C++ not have a "pure" keyword for virtual functions?

I have always wondered why we code virtual void MyFunction() = 0; and not pure virtual void MyFunction(); Is there a reference for the basis of this decision?
23
votes
4 answers

Never make public members virtual/abstract - really?

Back in the 2000s a colleague of mine told me that it is an anti-pattern to make public methods virtual or abstract. For example, he considered a class like this not well designed: public abstract class PublicAbstractOrVirtual { public abstract…
7
votes
2 answers

C++ : What is the order of function pointers inside vtable?

In this answer to "In C++ why and how are virtual functions slower?", the author mentions below point: "Get the right function address from the vtable into a register (the index where the correct function address is stored is decided at…
5
votes
4 answers

Is overriding a pure virtual function with default arguments good or bad?

Is overriding a pure virtual function with default arguments good or bad? class Base { public: virtual int func(int i, int j = 10) = 0; }; class Derived : public Base { public: int func(int i, int j = 20) override; };
msc
  • 287
  • 1
  • 2
  • 11
5
votes
1 answer

How does the base class non-virtual function get called when derived class object is assigned to base class?

#include class Base { private: int b_value; public: void my_func() {std::cout << "This is Base's non-virutal my_func()" << std::endl; } virtual void my_Vfunc() {std::cout << "This is Base's virutal my_Vfunc()" <<…
solti
  • 369
  • 2
  • 5
  • 10
3
votes
3 answers

True cost of virtual dispatch in C++ - when stop using it?

What I've learned so far as a programmer has lead me to think that the easiest way to write large scale software is to use a lot of interfaces - this makes things very easy to isolate and test. In high performance code, the performance loss due to…
Daniel
  • 207
  • 1
  • 4
3
votes
3 answers

Do any compilers do this optimization for virtual calls?

This just came to mind, and not really sure how to search for this. Let's say you have the following classes class A { public: virtual void Foo() = 0; virtual void ManyFoo(int N) { for (int i = 0; i < N; ++i) Foo(); }…
Bwmat
  • 769
  • 1
  • 6
  • 14
3
votes
1 answer

How is correct function method called at run-time?

Suppose we have a base class Aand derived class B. A implements a virtual method foo() which is overloaded in B. If we have an object test of type B, then the object would surely contain both implementations of foo(). When we call the method, how is…
M-R
  • 227
  • 2
  • 9
3
votes
3 answers

When to mark a function as virtual?

I'm trying to understand the idiomatic way to code. I'm using gmock to unit test the components I write. Gmock requires methods to be virtual to be able to mock but the class I'm trying to mock has a non virtual method that I would like to be mocked…
broun
  • 139
  • 1
  • 2
2
votes
3 answers

Why do we need factories in the first place?

I went through various blogs but nowhere I can find the reason of having virtual constructors in C++. Why is virtual constructor needed and lets say if we go through the wrong way of creating virtual constructor how would our code look like and what…
H Kumar
  • 31
  • 2
2
votes
3 answers

Object Oriented Programming - what is the best way to add new parameters?

I have a doubt about what would be the right OOP approach for implementing classes that do similar stuff with different parameters. To provide a simple example, I would use two polynomial classes, please, don't give an answer specific to…
2
votes
4 answers

Should a base class implement a virtual method for the most common type or derived class?

Is it okay to implement a virtual method in a base class because I know that the majority of derived classes will use that particular implementation? Suppose I have the following class hierarchy (in C#): public abstract class BaseClass { public…
2
votes
1 answer

What are the consequences of no virtual destructor for this base class?

I found this same code here: https://stackoverflow.com/a/5854862/257299 struct Base { virtual Base& operator+=(int) = 0; }; struct X : Base { X(int n) : n_(n) { } X& operator+=(int n) { n_ += n; return *this; } int n_; }; struct Y :…
kevinarpe
  • 253
  • 3
  • 7
2
votes
4 answers

Why do I need to declare virtual functions as such?

Example: We have a base class Base and three subclasses which all implement their own version of doSomething(). In an intermediate function f(Base b), we want to call the relevant version of doSomething() depending on which object has been…
M-R
  • 227
  • 2
  • 9
1
2