snippetcppCritical
How to call a parent class function from derived class function?
Viewed 0 times
howfromderivedfunctionparentclasscall
Problem
How do I call the parent function from a derived class using C++? For example, I have a class called
each class there is a
parent, and a class called child which is derived from parent. Within each class there is a
print function. In the definition of the child's print function I would like to make a call to the parents print function. How would I go about doing this?Solution
I'll take the risk of stating the obvious: You call the function, if it's defined in the base class it's automatically available in the derived class (unless it's
If there is a function with the same signature in the derived class you can disambiguate it by adding the base class's name followed by two colons
Incidentally, you can't derive directly from the same class twice since there will be no way to refer to one of the base classes over the other.
private).If there is a function with the same signature in the derived class you can disambiguate it by adding the base class's name followed by two colons
base_class::foo(...). You should note that unlike Java and C#, C++ does not have a keyword for "the base class" (super or base) since C++ supports multiple inheritance which may lead to ambiguity.class left {
public:
void foo();
};
class right {
public:
void foo();
};
class bottom : public left, public right {
public:
void foo()
{
//base::foo();// ambiguous
left::foo();
right::foo();
// and when foo() is not called for 'this':
bottom b;
b.left::foo(); // calls b.foo() from 'left'
b.right::foo(); // call b.foo() from 'right'
}
};Incidentally, you can't derive directly from the same class twice since there will be no way to refer to one of the base classes over the other.
class bottom : public left, public left { // Illegal
};Code Snippets
class left {
public:
void foo();
};
class right {
public:
void foo();
};
class bottom : public left, public right {
public:
void foo()
{
//base::foo();// ambiguous
left::foo();
right::foo();
// and when foo() is not called for 'this':
bottom b;
b.left::foo(); // calls b.foo() from 'left'
b.right::foo(); // call b.foo() from 'right'
}
};class bottom : public left, public left { // Illegal
};Context
Stack Overflow Q#357307, score: 1019
Revisions (0)
No revisions yet.