c++, 在子类中,如何在没有对象的情况下访问父类的方法?
c++, In Child class, how can access Parent class's method without a object?
我认为只有静态方法可以做以下事情,但它可以工作。有人能告诉我它是怎么工作的吗?这背后的原理是什么。
#include <iostream>
using namespace std;
class Parent {
protected:
unsigned char* buf;
unsigned int bufLenght;
public:
void Setup()
{
buf = nullptr;
bufLenght = 0;
cout << "in Parent class Setup()" << endl;
}
virtual void TearDown()
{
delete[] buf;
}
};
class Child : public Parent{
public:
virtual void Setup()
{
Parent::Setup(); // access Parent method without a parent's object?
cout << "in Child class Setup()" << endl;
}
};
int main(int argc, char const *argv[])
{
Child co;
co.Setup();
return 0;
}
运行此代码,结果是:
在父类Setup((中
在子类Setup((中
我在这里找到答案:如何从派生类函数中调用父类函数?
在用c++思考时,我也发现了同样的描述:但是,当您重新定义函数时,您可能仍然希望调用基类版本。如果在set((内部,您只需调用set((您将得到该函数的本地版本&一个递归函数呼叫若要调用基类版本,必须显式命名使用作用域解析运算符的基类。
每个Child
对象都构建在Parent
对象之上。每当你有一个Child
,你也有一个Parent
。
我似乎不明白你想要实现什么。您似乎忽略了试图重写的基类方法上的"virtual"关键字,因此从编译器接收到错误。
虽然您的问题还不清楚,但我在演示如何在C++中实现多态性方面做了最好的尝试:
class A {
protected:
// You will not be able to access this in the
// other class unless you explicitly declare it as
// a 'friend' class.
int m_ProtectedVariable;
public:
// Let's define a virtual function that we can
// override in another class.
virtual void ClassMethod( ) {
printf( "[A::ClassMethod] Called!n" );
}
}
class B : public A {
public:
// There is no need for the virtual/override keywords
// if you are overloading the function which is already defined
// in another class as 'virtual'. I prefer to keep them for
// pedantic reasons.
/* virtual */ void ClassMethod( ) /* override */ {
//
printf( "[B::ClassMethod] Called!n" );
// Since the function is a virtual, we can always
// call the base class function.
A::ClassMethod( /* ... */ );
}
}
希望你能发现这对你想要实现的目标有帮助:-(
编辑:在您的特定场景中,您应该在需要时分配缓冲区,然后销毁它——为什么不使用类构造函数/析构函数?让编译器决定何时管理内存(在这种情况下(会更直观,因为一旦对象超出范围,就会自动进行管理。
相关文章:
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 是否可以在不复制的情况下访问undered_map中的元素
- 为什么不能指向指针,在没有强制转换的情况下访问结构成员?
- 为什么可以在没有实例变量的情况下访问静态回调方法中的静态成员变量?
- 如何在不设置完整路径的情况下访问 c++ 中的资源
- 如何在 getter 的父类中初始化变量的情况下访问子类中的变量
- 在不违反严格的别名规则的情况下访问进程间共享内存中的对象
- C++ 在不打开文件的情况下访问IMAGE_OPTIONAL_HEADER64?
- 如何在不使用全局变量的情况下访问 lambda 中的变量
- C++是否提供了一种在没有范围解析运算符的情况下访问类中的类的方法?
- 是否可以超载[]运算符在不定义类的情况下访问特定的字符
- 在没有捕获列表的情况下访问 lambda 中的变量
- 如何在不注册对象的情况下访问标准项模型的数据?
- 在不破坏封装的情况下访问基类元素
- 如何在不将类数据成员作为参数传递的情况下访问线程中的类数据成员
- 如何在没有 A 全局的情况下访问 A::member()
- 在不知道名称的情况下访问函数参数
- 在不破坏封装的情况下访问替代功能
- 在多继承编译器的情况下访问成员变量是否依赖?如何正确地做
- 在没有位置的情况下访问违规读取位置