Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Sınıf Tasarımcısı , 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ımcısı 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 (Class View tarafından anonim tür için oluşturulan adı görüntüler)
Şablon sınıfı
Yapı
enum
Makro (makronun işlenen son görünümünü görüntüler)
Tür Tanımlayıcı
Uyarı
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ı: Referans.
Sınıf Tasarımcısı'nda C++ sınıfları
Sınıf Tasarımcısı , 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.
Uyarı
Sınıf Tasarımcısı 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.
Birden çok devralma
Sınıf Tasarımcısı , 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.
Uyarı
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ımcısı 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, Swimmer sınıfını bireysel nesneler olarak örneklemeyi 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 bildirimler 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 gösterimiyle birlikte, soyut sınıf şeklinde italik olarak 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, bir Fish sınıfından Swimmer sınıf türetirseniz, swim yöntemini Fish geçersiz kılmanız 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ımcısı öğesinden Fish öğesine Swimmerbir devralma çizgisi çizer.
Anonim sınıflar
Sınıf Tasarımcısı anonim sınıfları destekler. Anonim sınıf türleri , tanımlayıcı olmadan bildirilen sınıflardır. Oluşturucu veya yıkıcı içeremezler, işlevlere argüman olarak geçirilemezler ve işlevlerden dönüş değeri 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ımcısı , 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ımcısı 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ü ve Sınıf Tasarımcısı'nda__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ımcısı , ş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ımcısı 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ımcısı 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ımcısı 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ı BClass (Sınıf A'ya işaret eden) CClass (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ımcısı 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);}; |
Afunc<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, İç İçe Türler altında A sınıfı içerisinde yer alır) |
template <class T>class C {};class A : C<int> {}; |
AClass -> 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ımcısı görünümü |
|---|---|
template <class T>class C {};template<>class C<int> {class B {};}class A : C<int>::B {}; |
AClass ->B C<int>Class (B, C sınıfının İç İçe Türler altında yer alır) 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ımcısı görünümü |
|---|---|
template <class T>class C {};template<>class C<int> {};class A : C<int> {};class D : C<float> {}; |
AClass ->C<int> C<int>Class C<T>Şablon Sınıfı DClass ->C<float> |
class B {template <class T>T min (const T &a, const T &b);}; |
Bmin <T> |
Sınıf Tasarımcısı'nda C++ numaralandırmaları
Sınıf Tasarımcısı C++ enum ve scoped 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ımcısı'nda C++ tür tanımları
Typedef deyimleri, bir ad ile temel alınan türü arasında bir veya daha fazla dolaylı katman oluşturur.
Sınıf Tasarımcısı , 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ımcısı'nda bir C++ tür tanımı, tür tanımında belirtilen türün şekline sahiptir. Kaynak typedef class bildirirse, şeklin köşeleri yuvarlatılmış ve etiketi Sınıf olur.
typedef struct için, şeklin kare köşeleri vardır ve etiketi Struct şeklindedir.
Sınıfların ve yapıların içinde iç içe tür tanımları bildirilebilir. Sınıf Tasarımcısı'nda, 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;
Yapı türü tanımı örneği
typedef struct mystructtag
{
int i;
double f;
} mystruct;
Adsız tür tanımları
Bir typedef'i ad olmadan bildirebilmenize rağmen, Sınıf Tasarımcısı belirttiğiniz etiket adını kullanmaz. Sınıf Tasarımcısı, 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ımcısı'nda__unnamed adlı bir nesne olarak görünür:
typedef class coord
{
void P(x,y);
unsigned x;
unsigned y;
};
Uyarı
Sınıf Tasarımcısı , 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ımcısı 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ımcısı yalnızca yerel C++ semantiğini destekler. Yönetilen kodda derlenen C++ projeleri için Sınıf Tasarımcısı yalnızca yerel türlerdeki kod öğelerini görselleştirir. Bu nedenle, bir projeye sınıf diyagramı ekleyebilirsiniz, ancak Sınıf Tasarımcısı özelliğin
IsManagedayarlandığıtrueöğeleri (değer türleri ve başvuru türleri) görselleştirmenize izin vermez.C++ projeleri için Sınıf Tasarımcısı 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ımcısı hiçbir şey görüntülemez. Başka bir örnek olarak, diğer dosyaları eklemek için bir deyim 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ımcısı 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ımcısı genel işlevleri ve değişkenleri desteklemez.
Sınıf Tasarımcısı birlikleri 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ımcısı ve
intgibichartemel veri türlerini görüntülemez.Proje bu türlere doğru başvurulara sahip değilse, Sınıf Tasarımcısı geçerli proje dışında tanımlanan türleri görüntülemez.
Sınıf Tasarımcısı 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ülemez.
Sınıf Tasarımcısı 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ımcısı 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ımcısı 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ımcısı 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ımcısı'nınseç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ımcısı türü görüntüleyebilmelidir.
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ımcısı türleri aşağıdaki nedenlerle çözümleyemeyebilir:
Tür, sınıf diyagramını içeren projeden referans verilmeyen bir proje veya bütünleştirmede yer almaktadır. 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ımcısı bunu bulamıyor. Kodun bir
using,importsveya#includedeyimi 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 mevcut değil (veya yorum satırı olarak bırakı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şvurulan 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ımcısı'nın 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 projeye referans verilmemiş bir projede veya derlemede olabilir. Bu hatayı düzeltmek için, türü içeren projeye veya derlemeye bir referans ekleyin. Daha fazla bilgi için bkz. Projedeki başvuruları yönetme.
Sınıf Tasarımcısı'nın bulabilmesi için türün doğru kapsamda olduğundan emin olun. Kodun bir
using,importsveya#includedeyimi 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.
Tavsiye
Ek sorun giderme bilgileri için bkz . Sınıf Tasarımcısı hataları.