我认为只有静态方法可以执行以下操作,但是可以使用。 谁能告诉我它是如何工作的?这东西的原理是什么?
#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()
中
答案 0 :(得分:1)
每个Child
对象都建立在Parent
对象的顶部。每当您有Child
时,您也会有Parent
。
答案 1 :(得分:0)
我似乎无法理解您要达到的目标。看来您已经忽略了要覆盖的基类方法上的'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( /* ... */ );
}
}
希望您发现这对您要实现的目标有帮助:-)
编辑:在您的特定情况下,您应该在需要时分配一个缓冲区,然后再销毁它-为什么不利用类构造函数/析构函数的功能? 让编译器决定何时管理内存(在这种情况下)会更加直观,因为一旦对象超出范围,内存就会自动发生。