-1
派生類這是我的問題:訪問具有基類對象
class A {
public:
int foo;
void setFoo(val) { foo = val; }
};
class B1 : public A {
public:
void foo();
}
class B2 : public A {
public:
void bar();
}
int main()
{
A obj;
switch(t) // some menu
{
case '1':
obj.setFoo(something);
case '2':
obj.foo();
case '3':
obj.bar();
}
return 0;
}
交換機是在一個while循環 - 這是某種形式的菜單。第一例首先運行。
問題是情況2和3.obj是基類的實例,所以我無法訪問這些方法。
我該如何解決這個問題?
爲兩個派生類創建兩個不同的對象不起作用,因爲我必須在它們兩個上使用setFoo()方法,而且它不會再是相同的屬性。
你覺得'obj.foo()'會做什麼,即使它編譯了。 'obj'的類型是'A',所以它不能是B1或B2,並且沒有繼承要完成。你能更清楚'obj'究竟是什麼嗎?也許你實際上有'A * obj ='? –
在base中聲明所有這些方法爲虛擬的,並且使'obj'成爲'A *'而不是對象,因爲如果將派生類對象分配給基類,則將切片派生類屬性。 – theAlias
除了已經說過的之外,類B1甚至不是有效的,因爲它使用已經用於其基類中的屬性的函數的名稱。 – jPlatte