#include <iostream>
struct MemA { virtual void tellClass() { std::cout << "I am member of class A" << std::endl; } };
struct MemB : public MemA { void tellClass() { std::cout << "I am member of class B" << std::endl; } };
class A {
MemA *current;
public:
A() : current(new MemA()) {}
void getMemClass() { current->tellClass(); }
~A() { delete current; }
};
class B : public A {
MemB *current;
public:
B() : A(), current(new MemB()) {}
~B() { delete current; }
};
void main() { B().getMemClass(); }
在上面的程式中,我將tellClass()函式宣告為虛擬函式,這意味著它應該決定在運行時呼叫哪個函式。盡管它正在列印“我是 A 類的成員”,即使我是從 B 類物件呼叫的,該物件在繼承期間getMemClass()隱藏了MemA *currentwith 。MemB *current
我怎樣才能讓它正常作業?
uj5u.com熱心網友回復:
currentin 與 in是A不同的成員,即有兩個成員和。他們倆都是會員。currentBA::currentB::currentB
前者僅隱藏在current class 的背景關系中命名不合格的情況下,B而B::current不是A::current. 在 class 的背景關系中A(您正在評估 call current->tellClass();),非限定名稱仍然指的是A::current成員。
C 中的資料成員不能像(虛擬)成員函式那樣被覆寫。
您的物件的A::current成員B指向一個MemA完整的物件,而不是一個MemB物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/510572.html
標籤:C 调试
上一篇:找不到呼叫函式
