Přehled členů třídy
A class
nebo struct
se skládá z jejích členů. Práce, kterou třída provádí, provádí její členské funkce. Stav, který udržuje, je uložený ve svých datových členech. Inicializace členů se provádí konstruktory a vyčištění práce, jako je uvolnění paměti a uvolnění prostředků, provádí destruktory. V jazyce C++11 a novějších můžou být datové členy (a obvykle by se měly) inicializovat v okamžiku deklarace.
Typy členů třídy
Úplný seznam kategorií členů je následující:
Proměnlivé a statické datové členy, včetně předdefinovaných typů a dalších uživatelem definovaných typů.
Operátory
Vnořené deklarace tříd a.)
-
Poznámka
Přátelé jsou zahrnuty v předchozím seznamu, protože jsou obsaženy v deklaraci třídy. Nejsou však skutečnými členy třídy, protože nejsou v oboru třídy.
Ukázková deklarace třídy
Následující příklad ukazuje jednoduchou deklaraci třídy:
// TestRun.h
class TestRun
{
// Start member list.
// The class interface accessible to all callers.
public:
// Use compiler-generated default constructor:
TestRun() = default;
// Don't generate a copy constructor:
TestRun(const TestRun&) = delete;
TestRun(std::string name);
void DoSomething();
int Calculate(int a, double d);
virtual ~TestRun();
enum class State { Active, Suspended };
// Accessible to this class and derived classes only.
protected:
virtual void Initialize();
virtual void Suspend();
State GetState();
// Accessible to this class only.
private:
// Default brace-initialization of instance members:
State _state{ State::Suspended };
std::string _testName{ "" };
int _index{ 0 };
// Non-const static member:
static int _instances;
// End member list.
};
// Define and initialize static member.
int TestRun::_instances{ 0 };
Přístupnost členů
Členy třídy jsou deklarovány v seznamu členů. Seznam členů třídy může být rozdělen do libovolného počtu private
protected
částí a public
pomocí klíčových slov známých jako specifikátory přístupu. Dvojtečka :
musí dodržovat specifikátor přístupu. Tyto části nemusí být souvislé; to znamená, že některá z těchto klíčových slov se může v seznamu členů objevit několikrát. Klíčové slovo určuje přístup všech členů, dokud se neobjeví další specifikátor přístupu nebo uzavírací složená závorka. Další informace naleznete v tématu Řízení přístupu člena (C++).
Statické členy
Datový člen může být deklarován jako statický, což znamená, že všechny objekty třídy mají přístup ke stejné kopii třídy. Členová funkce může být deklarována jako statická, v takovém případě může přistupovat pouze ke statickým datovým členům třídy (a nemá žádný this
ukazatel). Další informace naleznete v tématu Statické datové členy.
Zvláštní členské funkce
Speciální členské funkce jsou funkce, které kompilátor poskytuje automaticky, pokud je nezadáte ve zdrojovém kódu.
Výchozí konstruktor
Kopírovací konstruktor
(C++11) Konstruktor move
Operátor pro kopírování přiřazení
(C++11) Operátor přesunutí přiřazení
Destruktor
Další informace naleznete v tématu Speciální členské funkce.
Inicializace podle člena
V jazyce C++11 a novější můžou deklarátory nestatického členu obsahovat inicializátory.
class CanInit
{
public:
long num {7}; // OK in C++11
int k = 9; // OK in C++11
static int i = 9; // Error: must be defined and initialized
// outside of class declaration.
// initializes num to 7 and k to 9
CanInit(){}
// overwrites original initialized value of num:
CanInit(int val) : num(val) {}
};
int main()
{
}
Pokud je člen přiřazena hodnota v konstruktoru, tato hodnota přepíše hodnotu přiřazenou k deklaraci.
Pro všechny objekty daného typu třídy existuje jenom jedna sdílená kopie statických datových členů. Statické datové členy musejí být definovány a mohou být inicializovány v rozsahu souboru. Další informace o statických datových členech naleznete v tématu Statické datové členy. Následující příklad ukazuje, jak inicializovat statické datové členy:
// class_members2.cpp
class CanInit2
{
public:
CanInit2() {} // Initializes num to 7 when new objects of type
// CanInit are created.
long num {7};
static int i;
static int j;
};
// At file scope:
// i is defined at file scope and initialized to 15.
// The initializer is evaluated in the scope of CanInit.
int CanInit2::i = 15;
// The right side of the initializer is in the scope
// of the object being initialized
int CanInit2::j = i;
Poznámka
Název třídy CanInit2
musí předcházet identifikátor i
, čímž určíte, že definovaný identifikátor i
je členem třídy CanInit2
.
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro