Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Perancang Kelas menampilkan permukaan desain visual yang disebut diagram kelas yang menyediakan representasi visual elemen kode dalam proyek Anda. Anda dapat menggunakan diagram kelas untuk merancang dan memvisualisasikan kelas dan jenis lain dalam proyek.
Class Designer mendukung elemen kode C++ berikut:
Kelas (menyerupai bentuk kelas terkelola, kecuali dapat memiliki beberapa hubungan pewarisan)
Kelas anonim (menampilkan nama yang dihasilkan Tampilan Kelas untuk jenis anonim)
Kelas templat
Struktur
Enum
Makro (menampilkan tampilan makro pasca-diproses)
Typedef
Nota
Ini tidak sama dengan diagram kelas UML, yang dapat Anda buat dalam Proyek Pemodelan. Untuk informasi selengkapnya, lihat Diagram Kelas UML: Referensi.
Kelas C++ di Perancang Kelas
Class Designer mendukung kelas C++ dan memvisualisasikan kelas C++ asli dengan cara yang sama seperti bentuk kelas Visual Basic dan C#, kecuali bahwa kelas C++ dapat memiliki beberapa hubungan pewarisan. Anda dapat memperluas bentuk kelas untuk menampilkan lebih banyak bidang dan metode di kelas atau menciutkannya untuk menghemat ruang.
Nota
Perancang Kelas tidak mendukung serikat pekerja (jenis kelas khusus di mana memori yang dialokasikan hanya jumlah yang diperlukan untuk anggota data terbesar serikat).
Pewarisan sederhana
Saat Anda menyeret lebih dari satu kelas ke diagram kelas, dan kelas memiliki hubungan pewarisan kelas, panah akan menghubungkannya. Panah menunjuk ke arah kelas dasar. Misalnya, saat kelas berikut ditampilkan dalam diagram kelas, panah menyambungkannya, menunjuk dari B ke A:
class A {};
class B : A {};
Anda juga dapat menyeret hanya kelas B ke diagram kelas, klik kanan bentuk kelas untuk B, lalu klik Tampilkan Kelas Dasar. Ini menampilkan kelas dasarnya: A.
Beberapa warisan
Perancang Kelas mendukung visualisasi hubungan pewarisan beberapa kelas. Pewarisan ganda digunakan ketika kelas turunan memiliki atribut dari lebih dari satu kelas dasar. Berikut ini adalah contoh beberapa pewarisan:
class Bird {};
class Swimmer {};
class Penguin : public Bird, public Swimmer {};
Saat Anda menyeret lebih dari satu kelas ke diagram kelas, dan kelas-kelas tersebut memiliki hubungan pewarisan multi-kelas, sebuah panah akan menyambungkannya. Panah menunjuk ke arah kelas dasar.
Mengklik kanan bentuk kelas lalu mengklik Tampilkan Kelas Dasar menampilkan kelas dasar untuk kelas yang dipilih.
Nota
Perintah Tampilkan Kelas Turunan tidak didukung untuk kode C++. Anda dapat menampilkan kelas turunan dengan masuk ke Tampilan Kelas, memperluas node jenis, memperluas subfolder Jenis Turunan , lalu menyeret jenis tersebut ke diagram kelas.
Untuk informasi selengkapnya tentang pewarisan beberapa kelas, lihat Beberapa Warisan dan Beberapa Kelas Dasar.
Kelas abstrak
Class Designer mendukung kelas abstrak (juga bernama "kelas dasar abstrak"). Ini adalah kelas yang tidak pernah Anda buat, tetapi dari mana Anda dapat memperoleh kelas lain. Dengan menggunakan contoh dari "Multiple Inheritance" sebelumnya dalam dokumen ini, Anda mungkin menginstansiasi kelas Bird menjadi objek individual sebagai berikut:
int main()
{
Bird sparrow;
Bird crow;
Bird eagle;
}
Namun, Anda mungkin tidak berniat untuk menginstansiasi kelas Swimmer sebagai objek terpisah. Anda mungkin hanya berniat untuk memperoleh jenis kelas hewan lainnya darinya, misalnya, Penguin, Whale, dan Fish. Dalam hal ini, Anda akan mendeklarasikan Swimmer kelas sebagai kelas dasar abstrak.
Untuk mendeklarasikan kelas sebagai abstrak, Anda dapat menggunakan abstract kata kunci. Anggota yang ditandai sebagai abstrak, atau disertakan dalam kelas abstrak, bersifat virtual dan harus diimplementasikan oleh kelas yang berasal dari kelas abstrak.
class Swimmer abstract
{
virtual void swim();
void dive();
};
Anda juga dapat mendeklarasikan kelas sebagai abstrak dengan menyertakan setidaknya satu fungsi virtual murni:
class Swimmer
{
virtual void swim() = 0;
void dive();
};
Saat Anda menampilkan deklarasi ini dalam Diagram Kelas, nama Swimmer kelas dan fungsi swim virtual murninya ditampilkan secara miring dalam bentuk kelas abstrak, bersama dengan notasi Kelas Abstrak. Perhatikan bahwa tipe kelas abstrak sama dengan kelas biasa, kecuali garis tepinya berupa garis putus-putus.
Kelas yang berasal dari kelas dasar abstrak harus mengambil alih setiap fungsi virtual murni di kelas dasar, atau kelas turunan tidak dapat dibuat. Jadi, misalnya, jika Anda menurunkan kelas Fish dari kelas Swimmer, Fish harus mengganti metode swim.
class Fish : public Swimmer
{
void swim(int speed);
};
int main()
{
Fish guppy;
}
Saat Anda menampilkan kode ini dalam Diagram Kelas, Perancang Kelas menggambar garis warisan dari Fish ke Swimmer.
Kelas anonim
Class Designer mendukung kelas anonim. Jenis kelas anonim adalah kelas yang dideklarasikan tanpa pengidentifikasi. Mereka tidak dapat memiliki konstruktor atau destruktor, tidak dapat diteruskan sebagai argumen ke fungsi, dan tidak dapat dikembalikan sebagai nilai pengembalian dari fungsi. Anda dapat menggunakan kelas anonim untuk mengganti nama kelas dengan nama typedef, seperti dalam contoh berikut:
typedef struct
{
unsigned x;
unsigned y;
} POINT;
Struktur juga bisa anonim. Perancang Kelas menampilkan kelas dan struktur anonim dengan cara yang sama seperti menampilkan jenis masing-masing. Meskipun Anda dapat mendeklarasikan dan menampilkan kelas dan struktur anonim, Class Designer tidak akan menggunakan nama tag yang Anda tentukan. Ini akan menggunakan nama yang dihasilkan Tampilan Kelas. Kelas atau struktur muncul di Tampilan Kelas dan Perancang Kelas sebagai elemen yang disebut __unnamed.
Untuk informasi selengkapnya tentang kelas anonim, lihat Jenis Kelas Anonim.
Kelas templat
Perancang Kelas mendukung visualisasi kelas templat. Deklarasi tertanam didukung. Tabel berikut ini memperlihatkan beberapa deklarasi umum.
| Elemen kode | Tampilan Perancang Kelas |
|---|---|
template <class T>class A {}; |
A<T>Kelas Templat |
template <class T, class U>class A {}; |
A<T, U>Kelas Templat |
template <class T, int i>class A {}; |
A<T, i>Kelas Templat |
template <class T, template <class K> class U>class A {}; |
A<T, U>Kelas Templat |
Tabel berikut ini memperlihatkan beberapa contoh spesialisasi parsial.
| Elemen kode | Tampilan Perancang Kelas |
|---|---|
template<class T, class U>class A {}; |
A<T, U>Kelas Templat |
template<class T>class A<T, T> {}; |
A<T, T>Kelas Templat |
template <class T>class A<T, int> {}; |
A<T, int>Kelas Templat |
template <class T1, class T2>class A<T1*, T2*> {}; |
A<T1*, T2*>Kelas Templat |
Tabel berikut ini memperlihatkan beberapa contoh pewarisan dalam spesialisasi parsial.
| Elemen kode | Tampilan Perancang Kelas |
|---|---|
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>Kelas Templat BClass (menunjuk ke Kelas A) CClass (menunjuk ke Kelas A) |
Tabel berikut ini memperlihatkan beberapa contoh fungsi templat spesialisasi parsial.
| Elemen kode | Tampilan Perancang Kelas |
|---|---|
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 kelebihan beban) |
template <class T1>class A {template <class T2>class B {};};template<> template<>class A<type>::B<type> {}; |
A<T1>Kelas Templat B<T2>Kelas Templat (B terkandung dalam kelas A di bawah bagian Tipe Tertanam) |
template <class T>class C {};class A : C<int> {}; |
AClass -> C<int> C<T>Kelas Templat |
Tabel berikut ini memperlihatkan beberapa contoh pewarisan templat.
| Elemen kode | Tampilan Perancang Kelas |
|---|---|
template <class T>class C {};template<>class C<int> {class B {};}class A : C<int>::B {}; |
AClass ->B C<int>Class (B terkandung dalam kelas C di bawah Tipe Bersarang) C<T>Kelas Templat |
Tabel berikut ini memperlihatkan beberapa contoh koneksi kelas khusus standar.
| Elemen kode | Tampilan Perancang Kelas |
|---|---|
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>Kelas Templat DClass ->C<float> |
class B {template <class T>T min (const T &a, const T &b);}; |
Bmin <T> |
Enumerasi C++ di Perancang Kelas
Class Designer mendukung tipe C++ enum dan tipe scoped enum class. Berikut ini adalah contohnya:
enum CardSuit {
Diamonds = 1,
Hearts = 2,
Clubs = 3,
Spades = 4
};
// or...
enum class CardSuit {
Diamonds = 1,
Hearts = 2,
Clubs = 3,
Spades = 4
};
Bentuk enumerasi C++ dalam diagram kelas terlihat dan berfungsi seperti bentuk struktur, kecuali bahwa label membaca kelas Enum atau Enum, berwarna merah muda alih-alih biru, dan memiliki batas berwarna di margin kiri dan atas. Bentuk enumerasi dan bentuk struktur memiliki sudut persegi.
Untuk informasi selengkapnya tentang menggunakan jenis enum, lihat Enumerasi.
C++ typedef di Perancang Kelas
Pernyataan Typedef membuat satu atau beberapa lapisan tidak langsung antara nama dan tipe dasarnya.
Class Designer mendukung jenis typedef C++, yang dideklarasikan dengan kata kunci typedef, misalnya:
typedef class coord
{
void P(x,y);
unsigned x;
unsigned y;
} COORD;
Anda kemudian dapat menggunakan jenis ini untuk mendeklarasikan instans:
COORD OriginPoint;
Bentuk kelas dan struktur
Di Perancang Kelas, typedef C++ memiliki bentuk jenis yang ditentukan dalam typedef. Jika sumber mendeklarasikan typedef class, bentuk tersebut memiliki sudut bulat dan label Kelas. Untuk typedef struct, bentuk memiliki sudut persegi dan label Struct.
Kelas dan struktur dapat memiliki typedef berlapis yang dideklarasikan di dalamnya. Di Perancang Kelas, bentuk kelas dan struktur dapat menampilkan deklarasi typedef berlapis sebagai bentuk berlapis.
Bentuk typedef mendukung perintah Tampilkan sebagai Asosiasi dan Perlihatkan sebagai Asosiasi Koleksi pada menu klik kanan (menu konteks).
Contoh typedef untuk kelas
class B {};
typedef B MyB;
Contoh struct typedef
typedef struct mystructtag
{
int i;
double f;
} mystruct;
Typedefs yang tidak disebutkan namanya
Meskipun Anda dapat mendeklarasikan typedef tanpa nama, Class Designer tidak menggunakan nama tag yang Anda tentukan. Class Designer menggunakan nama yang dihasilkan Class View. Misalnya, deklarasi berikut valid, tetapi muncul di Tampilan Kelas dan Perancang Kelas sebagai objek bernama __unnamed:
typedef class coord
{
void P(x,y);
unsigned x;
unsigned y;
};
Nota
Perancang Kelas tidak menampilkan typedefs yang jenis sumbernya adalah penunjuk fungsi.
Pelajari tentang batasan untuk elemen kode C++
Saat proyek C++ dimuat, Perancang Kelas berfungsi secara read-only. Anda dapat mengubah diagram kelas, tetapi Anda tidak dapat menyimpan perubahan dari diagram kelas kembali ke kode sumber.
Class Designer hanya mendukung semantik C++ asli. Untuk proyek C++ yang dikompilasi ke dalam kode terkelola, Class Designer hanya akan memvisualisasikan elemen kode yang merupakan jenis asli. Oleh karena itu, Anda dapat menambahkan diagram kelas ke proyek, tetapi Class Designer tidak akan memungkinkan Anda memvisualisasikan elemen tempat
IsManagedproperti diatur ketrue(yaitu, jenis nilai dan jenis referensi).Untuk proyek C++, Perancang Kelas hanya membaca definisi jenis. Misalnya, asumsikan bahwa Anda menentukan jenis dalam file header (.h) dan menentukan anggotanya dalam file implementasi (.cpp). Jika Anda memanggil "Lihat Diagram Kelas" pada file implementasi (.cpp), Perancang Kelas tidak menampilkan apa pun. Sebagai contoh lain, jika Anda memanggil "Lihat Diagram Kelas" pada file .cpp yang menggunakan
#includepernyataan untuk menyertakan file lain tetapi tidak berisi definisi kelas aktual, Class Designer lagi tidak menampilkan apa pun.File IDL (.idl), yang menentukan antarmuka COM dan pustaka jenis, tidak ditampilkan dalam diagram kecuali dikompilasi ke kode C++ asli.
Perancang Kelas tidak mendukung fungsi dan variabel global.
Perancang Kelas tidak mendukung serikat pekerja. Ini adalah jenis kelas khusus di mana memori yang dialokasikan hanya jumlah yang diperlukan untuk anggota data terbesar serikat.
Perancang Kelas tidak menampilkan jenis data dasar seperti
intdanchar.Perancang Kelas tidak menampilkan jenis yang ditentukan di luar proyek saat ini jika proyek tidak memiliki referensi yang benar ke jenis tersebut.
Perancang Kelas dapat menampilkan jenis berlapis tetapi bukan hubungan antara jenis berlapis dan jenis lainnya.
Perancang Kelas tidak dapat menampilkan tipe yang kosong atau yang berasal dari tipe yang kosong.
Memecahkan masalah resolusi tipe dan masalah tampilan
Lokasi file sumber
Perancang Kelas tidak melacak lokasi file sumber. Oleh karena itu, jika Anda memodifikasi struktur proyek atau memindahkan file sumber dalam proyek, Class Designer dapat kehilangan jejak jenis (terutama jenis sumber typedef, kelas dasar, atau jenis asosiasi). Anda mungkin menerima kesalahan seperti Perancang Kelas tidak dapat menampilkan tipe ini. Jika ya, seret kode sumber yang dimodifikasi atau direlokasi ke diagram kelas lagi untuk memutarnya kembali.
Masalah pembaruan dan performa
Untuk proyek C++, mungkin perlu waktu 30 hingga 60 detik agar perubahan file sumber muncul di diagram kelas. Penundaan ini juga dapat menyebabkan Perancang Kelas melemparkan kesalahan Tidak ada jenis yang ditemukan dalam pilihan. Jika Anda menerima kesalahan seperti ini, klik Batal di pesan kesalahan dan tunggu hingga elemen kode muncul di Tampilan Kelas. Setelah Anda melakukan ini, Perancang Kelas harus dapat menampilkan jenisnya.
Jika diagram kelas tidak diperbarui dengan perubahan yang telah Anda buat dalam kode, Anda mungkin perlu menutup diagram dan membukanya lagi.
Masalah resolusi tipe
Perancang Kelas mungkin tidak dapat mengatasi jenis karena alasan berikut:
Tipe ini berada dalam proyek atau rakitan yang tidak direferensikan oleh proyek yang berisi diagram kelas. Untuk memperbaiki kesalahan ini, tambahkan referensi ke proyek atau perakitan yang berisi tipe tersebut. Untuk informasi selengkapnya, lihat Mengelola referensi dalam proyek.
Jenis tidak berada dalam cakupan yang benar, sehingga Perancang Kelas tidak dapat menemukannya. Pastikan bahwa kode tidak kehilangan pernyataan
using,imports, atau#include. Pastikan juga Bahwa Anda belum memindahkan jenis (atau jenis terkait) keluar dari namespace tempat awalnya berada.Tipe tidak ada (atau telah dikomentari). Untuk memperbaiki kesalahan ini, pastikan Anda belum mengomentari atau menghapus tipe tersebut.
Jenis ini terletak di pustaka yang direferensikan oleh direktif #import. Solusi yang bisa dilakukan adalah menambahkan kode yang dihasilkan secara manual (file .tlh) ke dalam arahan #include di file header.
Pastikan Perancang Kelas mendukung jenis yang Anda masukkan. Lihat Batasan untuk elemen kode C++.
Kesalahan yang kemungkinan besar Anda lihat untuk masalah resolusi jenis adalah Kode tidak dapat ditemukan untuk satu atau beberapa bentuk dalam diagram kelas 'elemen<'>. Pesan kesalahan ini tidak selalu menunjukkan bahwa kode Anda dalam kesalahan. Ini hanya menunjukkan bahwa perancang kelas tidak dapat menampilkan kode Anda. Coba langkah-langkah berikut:
Pastikan tipe tersebut ada. Pastikan Anda belum secara tidak sengaja mengomentari atau menghapus kode sumber.
Cobalah untuk menyelesaikan tipe. Jenisnya mungkin berada dalam proyek atau rakitan yang tidak dirujuk dari proyek yang berisi diagram kelas. Untuk memperbaiki kesalahan ini, tambahkan referensi ke proyek atau assembly yang berisi tipe tersebut. Untuk informasi selengkapnya, lihat Mengelola referensi dalam proyek.
Pastikan bahwa jenis berada dalam cakupan yang benar sehingga Perancang Kelas dapat menemukannya. Pastikan bahwa kode tidak kehilangan pernyataan
using,imports, atau#include. Pastikan juga Bahwa Anda belum memindahkan jenis (atau jenis terkait) keluar dari namespace tempat awalnya berada.
Petunjuk / Saran
Untuk informasi pemecahan masalah tambahan, lihat Kesalahan Perancang Kelas.