使用派生类变量的基类函数 < C++中,是否有一种标准方法来创建基类中的函数,它可以使用派生类的变量? class Foo{ private: int x; public: Foo(){ x = 2; } void print(){ std::cout << x << std::endl; } }; class Derived : public Foo{ private: int x; public: Derived(){ x = 4; } }; void main() { Derived a; a.print(); } class-Foo{ 私人: int x; 公众: Foo(){ x=2; } 作废打印(){ std::cout

使用派生类变量的基类函数 < C++中,是否有一种标准方法来创建基类中的函数,它可以使用派生类的变量? class Foo{ private: int x; public: Foo(){ x = 2; } void print(){ std::cout << x << std::endl; } }; class Derived : public Foo{ private: int x; public: Derived(){ x = 4; } }; void main() { Derived a; a.print(); } class-Foo{ 私人: int x; 公众: Foo(){ x=2; } 作废打印(){ std::cout,c++,class,derived,C++,Class,Derived,否,基类不可能直接访问派生类中的任何内容。派生类与其基类共享任何内容的唯一方法是重写基类的虚拟成员函数 但是,在您的情况下,这并不是必需的:一旦您将派生类设置为受保护的,派生类就可以在基类中设置变量x,并将其自己的声明作为不必要的声明删除: class Foo{ protected: // Make x visible to derived classes int x; public: Foo(){ x = 2; } void print(){

否,基类不可能直接访问派生类中的任何内容。派生类与其基类共享任何内容的唯一方法是重写基类的虚拟成员函数

但是,在您的情况下,这并不是必需的:一旦您将派生类设置为
受保护的
,派生类就可以在基类中设置变量
x
,并将其自己的声明作为不必要的声明删除:

class Foo{
protected: // Make x visible to derived classes
    int x;
public: 
    Foo(){
        x = 2;
    }
    void print(){
        std::cout << x << std::endl;
    }
};

class Derived : public Foo{
public: 
    Derived(){
        x = 4;
    }
};
class-Foo{
protected://使x对派生类可见
int x;
公众:
Foo(){
x=2;
}
作废打印(){

std::cout否,基类不可能直接访问派生类中的任何内容。派生类与其基类共享任何内容的唯一方法是重写基类的虚拟成员函数

但是,在您的情况下,这并不是必需的:一旦您将派生类设置为
受保护的
,派生类就可以在基类中设置变量
x
,并将其自己的声明作为不必要的声明删除:

class Foo{
protected: // Make x visible to derived classes
    int x;
public: 
    Foo(){
        x = 2;
    }
    void print(){
        std::cout << x << std::endl;
    }
};

class Derived : public Foo{
public: 
    Derived(){
        x = 4;
    }
};
class-Foo{
protected://使x对派生类可见
int x;
公众:
Foo(){
x=2;
}
作废打印(){

std::cout基类不应该知道任何关于其派生类型的信息。要求这样做是一个糟糕的设计。您需要实现一个虚拟的
getA
方法。如果您在Foo中声明“x”为受保护,而不是在派生中再次声明它。这就是您想要的吗?不,我希望我的派生类有一个函数,该函数具有相同的功能,但具有它们的own个变量。每个变量都有不同的值。@user3023605 make
print()
virtual并在派生类中重写它基类不应该知道任何有关其派生类型的信息。要求这样做是一个糟糕的设计。您需要实现一个virtual
getA
方法。如果您在Foo中声明“x”受保护,而不是在派生类中再次声明它。这就是您想要的吗?不,我希望我的派生类有一个functi在上也有相同的操作,但有各自的变量。每个变量都有不同的值。@user3023605 make
print()
virtual并在派生类中重写它这会重写基类x吗?如果我创建多个派生类,它们会共享相同的x/值吗?@user3023605派生类的每个实例也有一个基类实例。因此,不,每个实例都有自己的
x
这正是我要找的!谢谢!我希望如此“他的方法没有缺点。@user3023605每个
Foo
实例或从Foo派生的类只有一个
x
。值在子类之间共享,但仅在单个对象的边界内共享;
Foo
的其他实例或从它派生的类将获得它们自己的
x
。这将覆盖base类x?如果我制作多个派生类,它们会共享相同的x/值吗?@user3023605派生类的每个实例都有一个基类实例。因此,不,每个实例都有自己的
x
这正是我要找的!谢谢!我希望他的方法没有缺点。@user3023605只有一个
x
>每个
Foo
实例或从Foo派生的类。值在子类之间共享,但仅在单个对象的边界内共享;其他
Foo
实例或从其派生的类将获得自己的
x