Aracılığıyla paylaş


Sınıf Tasarım Aracı C++ koduyla çalışma

Sınıf Tasarım Aracı, projenizdeki kod öğelerinin görsel bir gösterimini sağlayan sınıf diyagramı olarak adlandırılan bir görsel tasarım yüzeyi görüntüler. Bir projedeki sınıfları ve diğer türleri tasarlamak ve görselleştirmek için sınıf diyagramlarını kullanabilirsiniz.

Sınıf Tasarım Aracı aşağıdaki C++ kod öğelerini destekler:

  • Sınıf (birden çok devralma ilişkisine sahip olması dışında yönetilen bir sınıf şekline benzer)

  • Anonim sınıf (anonim tür için Sınıf Görünümü'nü oluşturan adı görüntüler)

  • Şablon sınıfı

  • Yapı

  • Numaralandırma

  • Makro (makronun işlenen son görünümünü görüntüler)

  • Typedef

Not

Bu, modelleme projesinde oluşturabileceğiniz UML sınıf diyagramıyla aynı değildir. Daha fazla bilgi için bkz . UML Sınıf Diyagramları: Başvuru.

Sınıf Tasarım Aracı C++ sınıfları

Sınıf Tasarım Aracı C++ sınıflarını destekler ve yerel C++ sınıflarını Visual Basic ve C# sınıf şekilleriyle aynı şekilde görselleştirir, ancak C++ sınıflarının birden çok devralma ilişkisi olabilir. Sınıfta daha fazla alan ve yöntem göstermek için sınıf şeklini genişletebilir veya alandan tasarruf etmek için daraltabilirsiniz.

Not

Sınıf Tasarım Aracı birleşimleri desteklemez (ayrılan belleğin yalnızca birleşimin en büyük veri üyesi için gereken miktar olduğu özel bir sınıf türüdür).

Basit devralma

Bir sınıf diyagramına birden fazla sınıf sürüklediğinizde ve sınıfların bir sınıf devralma ilişkisi olduğunda, bunları bir ok bağlar. Ok, temel sınıfın yönünü gösterir. Örneğin, aşağıdaki sınıflar bir sınıf diyagramında görüntülendiğinde, bunları B'den A'ya işaret eden bir ok bağlar:

class A {};
class B : A {};

Ayrıca, sınıf diyagramına yalnızca B sınıfını sürükleyebilir, B için sınıf şekline sağ tıklayabilir ve ardından Temel Sınıfları Göster'e tıklayabilirsiniz. Bu, temel sınıfını görüntüler: A.

Çoklu devralma

Sınıf Tasarım Aracı, birden çok sınıf devralma ilişkilerinin görselleştirmesini destekler. Türetilmiş bir sınıfın birden fazla temel sınıf özniteliği olduğunda birden çok devralma kullanılır. Birden çok devralma örneği aşağıda verilmiştir:

class Bird {};
class Swimmer {};
class Penguin : public Bird, public Swimmer {};

Sınıf diyagramına birden fazla sınıf sürüklediğinizde ve sınıfların birden çok sınıflı devralma ilişkisi olduğunda, bunları bir ok bağlar. Ok, temel sınıfların yönünü gösterir.

Bir sınıf şekline sağ tıklayıp Temel Sınıfları Göster'e tıklanması, seçilen sınıfın temel sınıflarını görüntüler.

Not

Türetilmiş Sınıfları Göster komutu C++ kodu için desteklenmez. Türetilmiş sınıfları Sınıf Görünümü'ne giderek, tür düğümünü genişleterek, Türetilmiş Türler alt klasörünü genişleterek ve sonra bu türleri sınıf diyagramına sürükleyerek görüntüleyebilirsiniz.

Birden çok sınıf devralma hakkında daha fazla bilgi için bkz . Birden Çok Devralma ve Birden Çok Temel Sınıf.

Soyut sınıflar

Sınıf Tasarım Aracı soyut sınıfları ("soyut temel sınıflar" olarak da adlandırılır) destekler. Bunlar, hiçbir zaman örneklemeyeceğiniz, ancak diğer sınıfları türetebileceğiniz sınıflardır. Bu belgenin önceki bölümlerinde yer alan "Birden Çok Devralma" örneğini kullanarak, sınıfı aşağıdaki gibi tek tek nesneler olarak başlatabilirsiniz Bird :

int main()
{
   Bird sparrow;
   Bird crow;
   Bird eagle;
}

Ancak, sınıfı tek tek nesneler olarak örneklemeyi Swimmer amaçlamayabilirsiniz. Yalnızca diğer türdeki hayvan sınıflarını türetmek isteyebilirsiniz, örneğin, Penguin, Whaleve Fish. Bu durumda, sınıfı soyut bir temel sınıf olarak bildirirsiniz Swimmer .

Bir sınıfı soyut olarak bildirmek için anahtar sözcüğünü abstract kullanabilirsiniz. Soyut olarak işaretlenmiş veya soyut bir sınıfa dahil edilen üyeler sanaldır ve soyut sınıftan türetilen sınıflar tarafından uygulanmalıdır.

class Swimmer abstract
{
   virtual void swim();
   void dive();
};

En az bir saf sanal işlev ekleyerek bir sınıfı soyut olarak da bildirebilirsiniz:

class Swimmer
{
   virtual void swim() = 0;
   void dive();
};

Bu bildirimleri bir Sınıf Diyagramı'nda görüntülendiğinde, sınıf adı Swimmer ve saf sanal işlevi swim soyut sınıf şeklinde italik olarak ve Soyut Sınıf gösterimiyle birlikte görüntülenir. Soyut sınıf türü şeklinin normal bir sınıfla aynı olduğuna dikkat edin, ancak kenarlığı noktalı bir çizgidir.

Soyut bir temel sınıftan türetilen bir sınıf, temel sınıftaki her saf sanal işlevi geçersiz kılmalıdır veya türetilmiş sınıfın örneği oluşturulamaz. Bu nedenle, örneğin, sınıfından Swimmer bir Fish sınıf türetirseniz yöntemini Fish geçersiz kılmanız swim gerekir:

class Fish : public Swimmer
{
   void swim(int speed);
};

int main()
{
   Fish guppy;
}

Bu kodu bir Sınıf Diyagramı'nda görüntülendiğinde, Sınıf Tasarım Aracı öğesinden Fish öğesine Swimmerbir devralma çizgisi çizer.

Anonim sınıflar

Sınıf Tasarım Aracı anonim sınıfları destekler. Anonim sınıf türleri , tanımlayıcı olmadan bildirilen sınıflardır. Bir oluşturucu veya yıkıcı olamazlar, işlevlere bağımsız değişken olarak geçirilemezler ve işlevlerden dönüş değerleri olarak döndürülemezler. Aşağıdaki örnekte olduğu gibi, bir sınıf adını typedef adıyla değiştirmek için anonim bir sınıf kullanabilirsiniz:

typedef struct
{
    unsigned x;
    unsigned y;
} POINT;

Yapılar anonim de olabilir. Sınıf Tasarım Aracı, anonim sınıfları ve yapıları ilgili türle aynı şekilde görüntüler. Anonim sınıfları ve yapıları bildirebilir ve görüntüleyebilirsiniz, ancak Sınıf Tasarım Aracı belirttiğiniz etiket adını kullanmaz. Sınıf Görünümü'nde oluşturulan adı kullanır. Sınıf veya yapı Sınıf Görünümü'nde ve Sınıf Tasarım Aracı __unnamed adlı bir öğe olarak görünür.

Anonim sınıflar hakkında daha fazla bilgi için bkz . Anonim Sınıf Türleri.

Şablon sınıfları

Sınıf Tasarım Aracı şablon sınıflarının görselleştirmesini destekler. İç içe bildirimler desteklenir. Aşağıdaki tabloda bazı tipik bildirimler gösterilmektedir.

Kod öğesi Sınıf Tasarım Aracı görünümü
template <class T>

class A {};
A<T>

Şablon Sınıfı
template <class T, class U>

class A {};
A<T, U>

Şablon Sınıfı
template <class T, int i>

class A {};
A<T, i>

Şablon Sınıfı
template <class T, template <class K> class U>

class A {};
A<T, U>

Şablon Sınıfı

Aşağıdaki tabloda kısmi özelleştirmeye ilişkin bazı örnekler gösterilmektedir.

Kod öğesi Sınıf Tasarım Aracı görünümü
template<class T, class U>

class A {};
A<T, U>

Şablon Sınıfı
template<class T>

class A<T, T> {};
A<T, T>

Şablon Sınıfı
template <class T>

class A<T, int> {};
A<T, int>

Şablon Sınıfı
template <class T1, class T2>

class A<T1*, T2*> {};
A<T1*, T2*>

Şablon Sınıfı

Aşağıdaki tabloda kısmi özelleştirmede devralma örnekleri gösterilmektedir.

Kod öğesi Sınıf Tasarım Aracı görünümü
template <class T, class U>

class A {};

template <class TC>

class A<T, int> {};

class B : A<int, float>

{};

class C : A<int, int>

{};
A<T, U>

Şablon Sınıfı

B

Sınıf

(Sınıf A'ya işaret eden)

C

Sınıf

(Sınıf A'ya işaret eden)

Aşağıdaki tabloda kısmi özelleştirme şablonu işlevlerinin bazı örnekleri gösterilmektedir.

Kod öğesi Sınıf Tasarım Aracı görünümü
class A

{

template <class T, class U>

void func(T a, U b);

template <class T>

void func(T a, int b);

};
A

func<T, U> (+ 1 aşırı yüklemesi)
template <class T1>

class A {

template <class T2>

class B {};

};

template<> template<>

class A<type>::B<type> {};
A<T1>

Şablon Sınıfı

B<T2>

Şablon Sınıfı

(B, A sınıfı içindeİç İçe Türler)
template <class T>

class C {};

class A : C<int> {};
A

Sınıf

-> C<int>

C<T>

Şablon Sınıfı

Aşağıdaki tabloda şablon devralma ile ilgili bazı örnekler gösterilmektedir.

Kod öğesi Sınıf Tasarım Aracı görünümü
template <class T>

class C {};

template<>

class C<int> {

class B {};

}

class A : C<int>::B {};
A

Sınıf

->B

C<int>

Sınıf

(B, C sınıfı içindeİç İçe Türler)

C<T>

Şablon Sınıfı

Aşağıdaki tabloda kurallı özel sınıf bağlantısının bazı örnekleri gösterilmektedir.

Kod öğesi Sınıf Tasarım Aracı görünümü
template <class T>

class C {};

template<>

class C<int> {};

class A : C<int> {};

class D : C<float> {};
A

Sınıf

->C<int>

C<int>

Sınıf

C<T>

Şablon Sınıfı

D

Sınıf

->C<float>
class B {

template <class T>

T min (const T &a, const T &b);

};
B

min <T>

Sınıf Tasarım Aracı C++ numaralandırmaları

Sınıf Tasarım Aracı C++ enum ve kapsamlı enum class türleri destekler. Aşağıda bir örnek verilmiştir:

enum CardSuit {
   Diamonds = 1,
   Hearts = 2,
   Clubs = 3,
   Spades = 4
};

// or...
enum class CardSuit {
   Diamonds = 1,
   Hearts = 2,
   Clubs = 3,
   Spades = 4
};

Sınıf diyagramındaki C++ numaralandırma şekli, yapı şekli gibi görünür ve çalışır, ancak etiket Enum veya Enum sınıfını okur, mavi yerine pembedir ve sol ve üst kenar boşluklarında renkli bir kenarlık vardır. Hem numaralandırma şekillerinin hem de yapı şekillerinin kare köşeleri vardır.

türünü kullanma enum hakkında daha fazla bilgi için bkz . Numaralandırmalar.

Sınıf Tasarım Aracı C++ tür tanımları

Typedef deyimleri, bir adla temel alınan türü arasında bir veya daha fazla dolaylı katman oluşturur. Sınıf Tasarım Aracı, anahtar sözcüğüyle typedefbildirilen C++ tür tanımı türlerini destekler, örneğin:

typedef class coord
{
   void P(x,y);
   unsigned x;
   unsigned y;
} COORD;

Ardından örneği bildirmek için bu türü kullanabilirsiniz:

COORD OriginPoint;

Sınıf ve yapı şekilleri

Sınıf Tasarım Aracı'nde C++ tür tanımı, tür tanımında belirtilen türün şekline sahiptir. Kaynak bildirirsetypedef class, şeklin köşeleri yuvarlatılmış ve Sınıfı etiketi vardır. içintypedef struct, şeklin kare köşeleri ve yapısı etiketi vardır.

Sınıfların ve yapıların içinde iç içe tür tanımları bildirilebilir. Sınıf Tasarım Aracı'nde, sınıf ve yapı şekilleri iç içe geçmiş typedef bildirimlerini iç içe yerleştirilmiş şekiller olarak gösterebilir.

Typedef şekilleri, sağ tıklama menüsünde ( bağlam menüsü) İlişkilendirme Olarak Göster ve Koleksiyon İlişkilendirmesi Olarak Göster komutlarını destekler.

Sınıf türü tanımı örneği

class B {};
typedef B MyB;

C++ class typedef in Class Designer

Yapı türü tanımı örneği

typedef struct mystructtag
{
    int   i;
    double f;
} mystruct;

C++ struct typedef in Class Designer

Adsız tür tanımları

Bir typedef'i ad olmadan bildirebilmenize rağmen, Sınıf Tasarım Aracı belirttiğiniz etiket adını kullanmaz. Sınıf Tasarım Aracı, Sınıf Görünümü'nde oluşturulan adı kullanır. Örneğin, aşağıdaki bildirim geçerlidir, ancak Sınıf Görünümü ve Sınıf Tasarım Aracı'nde __unnamed adlı bir nesne olarak görünür:

typedef class coord
{
   void P(x,y);
   unsigned x;
   unsigned y;
};

Not

Sınıf Tasarım Aracı, kaynak türü işlev işaretçisi olan tür tanımlarını görüntülemez.

C++ kod öğeleriyle ilgili sınırlamalar hakkında bilgi edinin

  • Bir C++ projesi yüklendiğinde, Sınıf Tasarım Aracı salt okunur bir şekilde çalışır. Sınıf diyagramını değiştirebilirsiniz, ancak değişiklikleri sınıf diyagramından kaynak koda geri kaydedemezsiniz.

  • Sınıf Tasarım Aracı yalnızca yerel C++ semantiğini destekler. Yönetilen kodda derlenen C++ projeleri için Sınıf Tasarım Aracı yalnızca yerel türlerdeki kod öğelerini görselleştirir. Bu nedenle, bir projeye sınıf diyagramı ekleyebilirsiniz, ancak Sınıf Tasarım Aracı özelliğin IsManaged ayarlandığı true öğeleri (değer türleri ve başvuru türleri) görselleştirmenize izin vermez.

  • C++ projeleri için Sınıf Tasarım Aracı yalnızca türün tanımını okur. Örneğin, üst bilgi (.h) dosyasında bir tür tanımladığınız ve üyelerini bir uygulama (.cpp) dosyasında tanımladığınız varsayılır. Uygulama (.cpp) dosyasında "Sınıf Diyagramını Görüntüle" çağrısı yaparsanız, Sınıf Tasarım Aracı hiçbir şey görüntülemez. Başka bir örnek olarak, diğer dosyaları eklemek için deyimini kullanan ancak gerçek sınıf tanımları içermeyen bir #include .cpp dosyasında "Sınıf Diyagramını Görüntüle" çağrısı yaparsanız, Sınıf Tasarım Aracı yine hiçbir şey görüntülemez.

  • COM arabirimlerini ve tür kitaplıklarını tanımlayan IDL (.idl) dosyaları, yerel C++ koduna derlenmedikleri sürece diyagramlarda görüntülenmez.

  • Sınıf Tasarım Aracı genel işlevleri ve değişkenleri desteklemez.

  • Sınıf Tasarım Aracı birleşimleri desteklemez. Bu, ayrılan belleğin yalnızca birleşimin en büyük veri üyesi için gereken miktar olduğu özel bir sınıf türüdür.

  • Sınıf Tasarım Aracı ve chargibi int temel veri türlerini görüntülemez.

  • Sınıf Tasarım Aracı, projenin bu türlere doğru başvuruları yoksa geçerli proje dışında tanımlanan türleri görüntülemez.

  • Sınıf Tasarım Aracı iç içe türleri görüntüleyebilir, ancak iç içe geçmiş bir türle diğer türler arasındaki ilişkileri görüntülenemez.

  • Sınıf Tasarım Aracı geçersiz olan veya void türünden türetilen türleri görüntüleyemez.

Tür çözümleme ve görüntüleme sorunlarını giderme

Kaynak dosyaların konumu

Sınıf Tasarım Aracı kaynak dosyaların konumunu izlemez. Bu nedenle, proje yapınızı değiştirir veya projenizdeki kaynak dosyaları taşırsanız, Sınıf Tasarım Aracı türün izini kaybedebilir (özellikle bir tür tanımı, temel sınıflar veya ilişkilendirme türlerinin kaynak türü). Sınıf Tasarım Aracı bu türü görüntüleyemiyor gibi bir hata alabilirsiniz. Bunu yaparsanız, değiştirilen veya yeniden konumlandırılan kaynak kodunu yeniden görüntülemek için sınıf diyagramına yeniden sürükleyin.

Güncelleştirme ve performans sorunları

C++ projelerinde, kaynak dosyadaki bir değişikliğin sınıf diyagramında görünmesi 30-60 saniye sürebilir. Bu gecikme, Sınıf Tasarım Aracı'nin seçimde hiçbir tür bulunamadı hatasını oluşturmasına da neden olabilir. Bunun gibi bir hata alırsanız, hata iletisinde İptal'e tıklayın ve kod öğesinin Sınıf Görünümü'nde görünmesini bekleyin. Bunu yaptıktan sonra Sınıf Tasarım Aracı türü görüntüleyebilir.

Sınıf diyagramı kodda yaptığınız değişikliklerle güncelleştirilmezse diyagramı kapatıp yeniden açmanız gerekebilir.

Tür çözümleme sorunları

Sınıf Tasarım Aracı türleri aşağıdaki nedenlerle çözümleyemeyebilir:

  • Türü, sınıf diyagramını içeren projeden başvurulmayan bir projede veya derlemededir. Bu hatayı düzeltmek için, türü içeren projeye veya derlemeye bir başvuru ekleyin. Daha fazla bilgi için bkz . Projedeki başvuruları yönetme.

  • Tür doğru kapsamda olmadığından, Sınıf Tasarım Aracı bunu bulamıyor. Kodun bir using, importsveya #include deyimi eksik olmadığından emin olun. Ayrıca türü (veya ilgili bir türü) özgün olarak bulunduğu ad alanının dışına taşımadığınızdan emin olun.

  • Tür yok (veya açıklama satırı yapıldı). Bu hatayı düzeltmek için açıklama eklemediğinizden veya türü silmediğinizden emin olun.

  • türü, #import yönergesi tarafından başvuruda bulunılan bir kitaplıkta bulunur. Olası bir geçici çözüm, oluşturulan kodu (.tlh dosyası) üst bilgi dosyasına bir #include yönergesine el ile eklemektir.

  • Sınıf Tasarım Aracı girdiğiniz türü desteklediğinden emin olun. Bkz. C++ kod öğeleri için sınırlamalar.

Tür çözümleme sorunu için büyük olasılıkla göreceğiniz hata, '<element>' sınıf diyagramındaki bir veya daha fazla şekil için Kod bulunamadı hatasıdır. Bu hata iletisi kodunuzun hatalı olduğunu belirtmez. Yalnızca sınıf tasarımcısının kodunuzu görüntüleyemediğini gösterir. Aşağıdaki ölçüleri deneyin:

  • Türün mevcut olduğundan emin olun. Kaynak kodu istemeden açıklama eklemediğinizden veya silmediğinizden emin olun.

  • Türü çözümlemeyi deneyin. Tür, sınıf diyagramını içeren projeden başvurulmayan bir projede veya derlemede olabilir. Bu hatayı düzeltmek için, türü içeren projeye veya derlemeye bir başvuru ekleyin. Daha fazla bilgi için bkz . Projedeki başvuruları yönetme.

  • Sınıf Tasarım Aracı'nin onu bulabilmesi için türün doğru kapsamda olduğundan emin olun. Kodun bir using, importsveya #include deyimi eksik olmadığından emin olun. Ayrıca türü (veya ilgili bir türü) özgün olarak bulunduğu ad alanının dışına taşımadığınızdan emin olun.

İpucu

Ek sorun giderme bilgileri için bkz. Sınıf Tasarım Aracı hataları.