2012-05-24 12 views
5

Czytam książkę, przewodnik Primer do C++.Czy te warunki C++ są poprawne?

Myślę, że zrozumiałem to do pewnego momentu, chcę tylko wyjaśnić kilka rzeczy.

  1. Mówi, że class jest jak typ danych (typ danych będącego int, char, ect ..) i że Object/Instance jest jak zmienna. Czy to prawda?

  2. Co to jest formularz danych?

  3. Jaką część oświadczenia stanowi oświadczenie? Czy to jest zadanie data type + the variable, a =?

+4

Dlaczego tak wiele pochlebstw? – TeaOverflow

+0

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

+2

Myślę, że to trochę trudne. Jeśli już czyta książkę i jest zdezorientowany, to są to ważne pytania. –

Odpowiedz

5

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 
} 
+0

Haha bardzo dziękuję za poświęcenie czasu na wyjaśnienia! – Ayfiaru

+1

Bez problemu. To staje się łatwiejsze - przekonasz się, że możesz napisać na nowo swój 2-gi-letni projekt końcowy, który trwał 3 miesiące w 15 minut w twoim roku starszym :) (zakładając, że jesteś w college'u, haha). –

+0

Awesome, thanks;) – Ayfiaru

Powiązane problemy