2011-08-18 100 views
1

我正在寫一個C++代碼,它應該基於從對象指針開始的函數填充屏幕(以及它的行爲)。讓我們更好地展示它的代碼:如何重新鍵入指向類的指針,並能夠基於類的類型達到類的功能?

class A:parentClass { 
public: 
    int X() {return 5;} 
} 

class B:parentClass { 
public: 
    int X() {return 3;} 
} 

class C:parentClass { 
public: 
    int X() {return 1;} 
} 

main { 
    parentClass *p; 
    p = new A; 
    printf("%d\n,p.x); //to return 5 
    delete p; 
    p = new B; 
    printf("%d\n,p.x); //to return 3 
} 

我得到像這樣的編譯:

‘class parrentClass’ has no member named ‘x’ 

我知道,這是錯誤的,因爲parrentClass根本沒有該成員,但我不知道如何解決這個問題。我試圖通過模板,但我沒有得到任何地方。

我也嘗試替換「parentClass * p;」與 「詮釋* P;」,但後來我發現了:

cannot convert ‘CardsFrame*’ to ‘int*’ 

感謝提前你的建議,

+1

這不是你真正的代碼(如果是的話,有大約200個錯誤的東西)。請張貼您實際編譯的代碼,如果代碼太大,則編寫一個可編譯的示例程序(除了您要查詢的部分外)。 –

+1

你的class parentClass聲明在哪裏? –

回答

1
printf("%d\n,p.x); //to return 5 

應該是:

printf("%d\n,p->X()); //to return 5 

另外,X()應該在基類中是虛擬的。

2

因爲你的語法都是錯誤的,所以你確實需要讓你的基礎知識正確。您需要使用p->X()來調用該功能。並回答基礎類中的實際問題X()virtual

4

您需要聲明X()方法virtual父類的這個工作:

class ParentClass 
{ 
    public: 
     virtual int X(); 
}; 

需要明確的是:下面是一個完整的工作示例(用gcc編譯):

#include <iostream> 

class ParentClass { 
public: 
    virtual int x() = 0; 
}; 

class A : public ParentClass { 
public: 
    int x() { return 5; } 
}; 

class B : public ParentClass { 
public: 
    int x() { return 3; } 
}; 

class C : public ParentClass { 
public: 
    int x() { return 1; } 
}; 

int main() { 
    ParentClass *p; 
    p = new A; 
    std::cout << p->x() << std::endl; // prints 5 
    delete p; 
    p = new B; 
    std::cout << p->x() << std::endl; // prints 3 
    delete p; 
} 
+0

感謝您投入的精力!這就是我正在尋找的! 對於其他人我很抱歉,我的第一個代碼是垃圾,我會嘗試下次編譯我的例子。 Jan – Jan