gpt4 book ai didi

c++ - C++ 中另一个类及其父类的共享类

转载 作者:搜寻专家 更新时间:2023-10-31 00:13:15 27 4
gpt4 key购买 nike

我需要从另一个类 (DerivedClass) 及其父类 (BaseClass) 访问一些共享类。这是我的想法:

class BaseClass {
public:
virtual SharedClass *sharedClass; // Error! Virtual cannot use for non-static vars
void callFromBaseClass() {
sharedClass.testFunc();
// I need an access to sharedClass here too as well as in the DerivedClass
}
};

class DerivedClass : public BaseClass {
public:
SharedClass *sharedClass;
DerivedClass( SharedClass *sharedClass ) {
this->sharedClass = sharedClass;
}
void callFromDerivedClass() {
sharedClass.testFunc();
}
};

并使用它:

SharedClass sharedClass;
DerivedClass derivedClass( &sharedClass );

我以为我可以使用 virtual 作为指向类的指针,但我在那里遇到错误:'virtual' can only appear on non-static member functions.所以我不知道如何访问 sharedClass 的函数。你有什么想法吗?

最佳答案

关键字 virtual 用于允许派生类提供给定函数的它们自己的实现。

您正在寻找数据的基本继承。这总是完成的,访问是用可见性修饰符控制的。您使用了 public:(对所有人可见),但还有 protected:(仅对类及其子类可见)和 private:

类中的任何普通变量如果对其他类可见,则可以被其他类使用。在另一个类中,不应重复对象声明(因为它会隐藏您正在寻找的具有相同名称的对象)。

因此在您的情况下,如果您从 DerivedClass 类中删除声明,您将能够使用 BaseClass 中的声明。

结果如下:

class BaseClass {
protected:
SharedClass *sharedClass; // No virtual
public:
BaseClass( SharedClass *sharedClass ) {
this->sharedClass = sharedClass;
}
void callFromBaseClass() {
sharedClass->testFunc();
// I need an access to sharedClass here too as well as in the DerivedClass
}
};

class DerivedClass : public BaseClass {
public:
// No declaration of sharedClass
DerivedClass( SharedClass *sharedClass )
:BaseClass(sharedClass) // Pass the shared class to the base class.
{

}
void callFromDerivedClass() {
// Shared class is visible here because it is in the base class with visibility protected.
sharedClass->testFunc();
}
};

请注意,这将在变量为公共(public)变量时起作用,但最好尽可能地限制范围,因此保护在这里更合适。

关于c++ - C++ 中另一个类及其父类的共享类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27479050/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com