在C++中,继承和多态是面向对象编程的两个核心概念。当我们谈到继承时,super
这个词通常用来指代基类(父类)引用或指针。通过使用super
,我们可以在派生类(子类)中访问基类的成员函数和变量。以下是C++中继承和super
的一些不同解决之道:
class Base {
public:
void foo() {
// ...
}
};
class Derived : public Base {
public:
void bar() {
Base::foo(); // 使用基类名称来调用foo()
}
};
this->
指针:class Derived : public Base {
public:
void bar() {
this->foo(); // 使用this指针来调用foo()
}
};
::
:class Derived : public Base {
public:
void bar() {
Base::::foo(); // 使用范围解析运算符来调用foo()
}
};
using
声明:class Derived : public Base {
public:
using Base::foo; // 使用using声明来引入基类的foo()到派生类的命名空间中
void bar() {
foo(); // 现在可以直接调用foo(),无需前缀
}
};
class Base {
public:
virtual void foo() {
// ...
}
};
class Derived : public Base {
public:
void foo() override {
// ...派生类特定的实现
}
};
int main() {
Base* b = new Derived();
b->foo(); // 动态绑定,调用的是Derived类的foo()
delete b;
return 0;
}
super
关键字(注意:这不是一个实际的C++关键字,而是一个提案,可能在未来的C++标准中被采纳):class Base {
public:
virtual void foo() {
// ...
}
};
class Derived : public Base {
public:
void foo() override {
super::foo(); // 如果C++20采纳了这个提案,这将调用Base类的foo()
}
};
在实际编程中,选择哪种方法取决于具体的需求和上下文。例如,如果你想在派生类中覆盖基类的成员函数,但又想在其内部调用基类的原始实现,那么使用using
声明或虚函数可能是更好的选择。如果你只是想简单地调用基类的成员函数,而不考虑覆盖它,那么直接使用基类名称或this->
指针可能就足够了。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。