2015-01-31 34 views
6

bu soyut temel sınıf bir tanımı yapılabilir: "tek saf sanal yöntem içermektedir ve genellikle elde edilen sınıfları için bir arayüz tarifnamede olarak görev yapan" (soyut temel sınıf tanımı

veya soyut temel sınıf, diğer yöntemler içerebilir Ayrıca) sanal C++ standart (§10.4, Özet Sınıflar, vurgu benim) gelen tanım olarak

+0

"en az bir salt sanal yöntem içerir" daha iyi bir tanım olabilir. – juanchopanza

+0

En az bir salt sanal yöntem içeriyorsa, bir sınıf soyutdur. Diğer yöntemleri içerebilir - saf sanal, sanal ve/veya sanal olmayan. –

+0

Yalnızca saf sanal olan sınıflar (başka hiçbir yöntem veya veri üyesi) normal olarak arabirimler olarak adlandırılır. Soyut bir sınıf, düzenli fonksiyonlara sahip olabilen bir arayüzdür. Her iki tip, saf sanal işlevler nedeniyle başlatılamıyor. –

cevap

4

:

bir soyut sınıf başka bir temel sınıf yalnızca kullanılabilecek bir sınıftır sınıf; Bir soyut sınıfının nesnesi, ondan türetilen bir sınıfın alt nesneleri dışında oluşturulamaz. Bir sınıf, en az teksalt sanal işlevi ise soyutdur. [Not: Böyle bir işlev devralındı ​​olabilir: aşağıya bakın. -end not] örnekte

class point {/.../}; 
class shape { // abstract class 
    point center; 
public: 
    point where() { return center; } 
    void move(point p) { center=p; draw(); } 
    virtual void rotate(int) = 0; // pure virtual 
    virtual void draw() = 0; // pure virtual 
}; 

, shape (bir soyut bir sınıf kılan) kullanılarak iki saf sanal yöntemleri içerir, ancak aynı zamanda iki sanal olmayan yöntemler içerir. Sorun değil. Bu nedenle, soyut bir sınıfın sadece saf sanal işlevleri içerdiği özgün tanımınız çok daraltıcıdır. Sadece en az birine sahip olmak yeterlidir.

+0

bunun için teşekkürler ... tanımı bir yerde okudum ve gerçekten kafası karışmış .. !! –

+0

@KaushikReddy Bunun gibi bazı tanımlamalar vardır: Bunlar, programlama hakkında kendilerini düşünmekten daha fazla düşünen insanlardan kaynaklanır. Soyut bir düşünme akademisi için soyut bir sınıf, soyut olmayan bir parça olmadığı sürece gerçekten soyut değildir (bilmeliyim ki, ben bir akademisyenim ... ;-)) Ama eğer C++ hakkında soru soruyorsanız, dil standardı normatiftir. – cmaster