Niezupełnie.
Klasa jest "podobna do typu danych" w tym sensie, że jest szablonem do tworzenia obiektu, ale sama nie jest obiektem, z którego można korzystać.
Gdy używasz tego szablonu do utworzenia instancji obiektu, możesz użyć tego obiektu. Możesz utworzyć tyle instancji, ile chcesz - możesz myśleć o tych instancjach jako zmiennych.
Na przykład:
class Person
{
public:
Person() : name("Joe Bloggs") {}
std::string getName() { return name; }
void setName(std::string n) { name = n; }
private:
std::string name;
};
Jest to definicja klasy dla danej osoby. To nie jest zmienna. Nie możesz wywołać metody setName, ponieważ nie istnieje jeszcze. Ale kiedy to zrobić:
int main()
{
Person p, q;
p.setName("Jill Bloggs");
q.setName("Bob King");
std::cout << p.getName() << " " << q.getName() << std::endl;
}
Utworzono dwa przypadki osób, które można przypisać do, zmiany i użytkowania - są zmienne zwane przypadki.
Nie mam pojęcia, co oznacza "forma danych", zignoruj to.
Co do deklaracji - deklaracja stwierdza, że wystąpi jakaś instancja. Na przykład, jeśli podczas tworzenia klasy i plik nagłówka miał:
class foo
{
public:
foo(int value);
void bar();
private:
int x;
};
Jesteś oświadczając, że masz funkcję o nazwie bar zwracającej void i że masz całkowitą o nazwie x.
Dla zmiennej nie jest przydzielana żadna pamięć, nie podano definicji ani paska, więc są to tylko deklaracje. Plik źródłowy prawdopodobnie dostarczyć definicji do baru jak:
void foo::bar()
{
//some code
}
i zaliczane konstruktora dla foo że zainicjowanie X o wartości i kontrolować w jaki sposób został stworzony (z listy inicjatora):
foo::foo(int value) : x(value)
{
//some code
}
Dlaczego tak wiele pochlebstw? – TeaOverflow
Nie wiem; Sądziłem, że pytania będą proste w odpowiedzi, a ja poświęciłem czas na napisanie pytań, aby można je było skutecznie zwrócić. – Ayfiaru
Myślę, że to trochę trudne. Jeśli już czyta książkę i jest zdezorientowany, to są to ważne pytania. –