對我來說,描述我的問題是相當困難的。 我有兩個班,我會說和Derived_A
。您可以從名稱中看到,類Derived_A
源自。另外在我的程序中,我還有其他兩個類Base_B
和Derived_B
(也有繼承)。類包含Base_B
的對象,而類Derived_A
包含Derived_B
的對象。C++繼承指針
class Base_A {
public:
Base_A() {}
virtual ~Base_A() {}
Base_B b_;
Base_B* pointer_;
void init() {
b_ = Base_B();
pointer_ = &b_;
pointer_->setValue(1);
}
void print() {
pointer_->getValue();
}
};
class Derived_A: public Base_A {
public:
Derived_A() {}
virtual ~Derived_A() {}
Derived_B b_;
Derived_B* pointer_;
void init() {
b_ = Derived_B();
pointer_ = &b_;
pointer_->setValue(2);
pointer_->increaseValue();
}
};
class Base_B {
public:
Base_B() {}
virtual ~Base_B() {}
int value_;
void setValue(int value) {
value_ = value;
}
void getValue() {
cout << "Base_B: " << value_ << endl;
}
};
class Derived_B: public Base_B {
public:
Derived_B() {}
virtual ~Derived_B() {}
void increaseValue() {
value_++;
}
};
int main() {
Derived_A derived_A = Derived_A();
derived_A.init();
derived_A.print();
return 0;
}
如何看到A的每個類有一個B類對象和指向此對象的指針。我的問題是,當我調用功能print()
時,它不需要Derived_B* pointer_
,但嘗試訪問Base_B* pointer_
,這是不存在的。我怎麼能在我的程序中說,它應該根據班級採取指針?或者我需要declarate內Derived_A
類像Base_B* pointer_
:
Base::pointer_ = pointer_;
也許是有我的問題的其他方法或算法?
非常感謝。
你可以創建一個虛函數來返回適當的指針。你知道Derived_A有兩個'pointer_'s嗎? –
是的,我知道Derived_A有兩個指針。這只是一個例子。在真正的程序中,這個指針有不同的名字。關於你的想法。你的意思是說,我需要一個函數返回一個類B的指針,並將該指針指向函數print()? –
或者直接將該方法調用到print()中。您也可以使虛擬打印並在派生類中重寫它。我不知道你在做什麼。 –