c++ 访问“父母”类成员[已关闭]

5lwkijsr  于 11个月前  发布在  其他
关注(0)|答案(3)|浏览(155)

**已关闭。**此问题为not reproducible or was caused by typos。目前不接受回答。

这个问题是由错字或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
两年前关闭。
Improve this question
我已经知道使用全局变量不是一个好的做法,我不想使用静态变量,因为它的行为也像一个“全局”变量,如果我是正确的。
在下面的代码中,我希望类B能够访问它的“parents”成员,这可能吗?(参见类B构造函数)。
或者我应该如何处理这个问题,我想在类之间访问var/members?
朋友,似乎也不是办法。

class A {
public:
    int number_I_want = 987;
    A() {
        B* classB = new B();
    }
};

class B {
public:
    int nr = 0;
    B() {
        nr = this->parent->number_I_want; /// Here I want to access the "parent" A's member with value 987 
        cout << nr * nr;
    }
};

int main() {
    A* classA = new A();
    return 0;
}

字符串

siv3szwd

siv3szwd1#

类A是父类,所以如果成员/字段不是私有的,你可以在类B中访问它们。但是类B必须是类A的子类。你必须从A扩展类B。如果你有父类的参数化构造函数,你必须从类B初始化类A构造函数。

sdnqo3pr

sdnqo3pr2#

在C中,对象没有父子关系,这有时会让来自对象存储模型语言的人感到困惑(它们要么是基于VM的,要么是解释器)。父类有一个对象拥有这个对象。C使用抽象内存模型。如果一个类B是从其他类A继承的,那么类A是B的子类。基类和类成员是给定类的子对象,这意味着它们的存储是封闭对象存储的一部分。继承基类的成员也是子对象,并且可以作为类成员访问,并考虑访问级别和继承级别(private,public,protected)。
封闭对象拥有被包含对象,调用其析构函数将导致被包含对象的析构。
如果你需要实际的parent\child关系,你必须实现它并将parent的指针(?)传递到child的构造函数中,同时它必须能够在给定的parent中注册self。
一些C++框架通过使用元编程技术来模拟对象模型,例如Qt框架的QObject可能有一个父对象和子对象列表。

hivapdat

hivapdat3#

在创建“子”类时使用指向>>this<<关键字的指针对我来说很有效。

class A {
public:
    int nr;
    A();
};

class B {
public:
    B(A* classA) {
        std::cout << "Written in class B, value from class A: "<< classA->nr;
    };
};

A::A() {
    nr = 77;
    B* classB = new B(this);
    delete classB;
}

int main() {
    A* classA = new A();
    delete classA;
    return 0;
}

字符串

相关问题