2014-01-16 3 views
0

Я только начинаю изучать классы, конструкторы и функции C++, но я не такой, если я правильно понимаю. У меня нет проблем с кодом, потому что он работает нормально, я просто запутался в том, какой бит это, я добавил комментарии в код к тому, что, на мой взгляд, является правильным. Я был бы признателен, если бы кто-нибудь мог объяснить, ошибаюсь я и/или прав. Благодарю.C++ классы, конструкторы и функции

Это main.cpp, и я понимаю, файл полностью:

#include "Something.h" 
    #include <iostream> 
    using namespace std; 

    int main(){ 
    Something JC; 
    system("PAUSE"); 
    return 0; 
    } 

Это Something.cpp:

#include "Something.h" 
    #include <iostream> 
    using namespace std; 

    //Something is the class and :: Something() is the function? 

    Something::Something() 
    { 
    cout << "Hello" << endl; 
    } 

Это something.h:

// this is a class which is not within the main.cpp because it is an external class? 

    #ifndef Something_H 
    #define Something_H 

    class Something{ 
    public: 
    Something(); //constructor? 
    }; 

    #endif 

Я просто хочу понять, какой бит есть, если я ошибаюсь.

ответ

1
  1. Вы обычно определяют классы в файле заголовка, как вы делали в Something.h, так что многие .cpp файлы могут включать этот заголовок и использовать класс.

  2. Конструктор - это специальная функция, имя которой совпадает с именем, к которому принадлежит класс. Таким образом, конструктор Something также называется Something.

    class Something { // Class definition 
        public: 
        Something(); // Constructor declaration 
    }; 
    
    Something::Something() // Constructor definition 
    { 
        cout << "Hello" << endl; 
    } 
    

    Конструктор декларации как раз говорит о том, что конструктор для Something, который не принимает никаких аргументов не существует. На самом деле это не реализуется. Любые файлы .cpp, которые включают Something.h, не должны знать о реализации, только то, что она существует. Вместо этого реализация указана в Something.cpp.

    Поскольку определение конструктора написано за пределами определение класса, вы должны сказать, что оно принадлежит Something. Для этого вы можете квалифицировать его с помощью вложенного спецификатора имен Something::. То есть Something::foo обозначает foo внутри класса Something, а Something::Something поэтому обозначает конструктор Something.

1

Something(); в классе-теле объявление конструктора (указывается, что есть один), в то время как

Something::Something() 
{ 
cout << "Hello" << endl; 
} 

является определение конструктора (говорит, что он делает). Ваша программа может иметь несколько деклараций одной и той же функции (особенно это относится и к конструкторам), но только одно определение. (Исключение составляют встроенные функции, но здесь это не применимо).

Смежные вопросы