2

Я запрограммировал немного C++ назад около 14 лет назад. Я познакомился с новыми технологиями, такими как .NET, с которыми я работаю в основном.Почему при создании нового класса C++ создаются два файла (.h и .cpp)?

Теперь, я пишу список телефонов телефона simlpe, приложение Windows, которое я хочу сделать на C++, чтобы лучше видеть различия на C# и C++.

Позвольте мне сказать, что я уже заметил разницу! Hehehe ... Следовательно, одно из этих различий заключается в том, что при создании нового класса C++ из шаблона Visual Studio он создает не только файл класса .cpp, но также заголовочный файл вместе с ним.

Почему это так? Зачем создавать файлы class1.h и class1.cpp для одного класса?

Я помню, что заголовочные файлы - это, вероятно, библиотеки функций и объектов, если можно так выразиться, для повторного использования в будущем, я правильно помню?

Вопросы

  1. Почему существуют два файла (.h и .cpp), созданный при добавлении нового класса C++?
  2. Должен ли я определять элементы в файле заголовка и определять ядро ​​функций в файле cpp?
  3. Если нет 2, то какой файл заголовка для этого конкретного сценария?

EDIT # 1

Затем следует мой код выглядит следующим образом?

// Customer.h header file 
ref class Customer { 
    private: 
     char* _number, _name; 
     long _phoneNumber; 

    public: 
     char[] get_number(); 
     void set_number(char* number); 
     char[] get_name(); 
     void set_name(char* name); 
     long get_phoneNumber(); 
     void set_phoneNumber(long phoneNumber); 
     void set_name(char* name); 
} 

Тогда:

// Customer.cpp 
#include <Customer.h> 

char[] Customer::get_number() { 
    return _number; 
} 

void Customer::set_number(char* number) { 
    if (number != null && sizeof(number) < 1) return; 
    _number = number; 
} 

// And the other members here... 

Теперь я знаю, больше всего будет много ошибок в моем коде. Я буду рад, если вы поможете мне исправить их, чтобы я мог улучшить свои навыки на C++.

Спасибо, что помогли мне разобраться.

+1

это C++/CLI - вы хотите использовать собственный C++ или управляемый код на C++? Есть серьезные отличия. – 2010-12-06 20:31:42

+0

@Steve: Спасибо, что указали это мне. На самом деле, я не могу сказать. Я думаю, что родной C++ был бы лучше для меня достаточно окунуться в C++, чтобы я мог быстро встать и работать достаточно быстро, чтобы я мог эффективно разрабатывать приложение, верно? Или это даже достойно? – 2010-12-06 20:43:14

ответ

2

Функции и классы в C++ должны быть объявлены перед их использованием, это просто объявление о том, что эти функции могут быть использованы из этого файла. Эти декларации импортируются с использованием файлов заголовков (.hpp/.h файлов).

Чтобы объявить функцию, можно было бы написать так:

return typefunction name(arguments);

поэтому эту функцию:

int factorial (int x) 
{ 
    if (x == 0) 
    return 1; 
    return x * factorial (x - 1); 
} 

бы быть предопределенным как это:

int factorial (int x); 

объявляя классов, как это:

classclass name{function and variable declarations};

Так class Foo методом bar и переменной baz общественного члена будет выглядеть следующим образом:


foo.hpp:

#ifndef FOO_HPP_ 
#define FOO_HPP_ 

class Foo 
{ 
public: 
    int baz; 

    void bar(); 
}; 

#endif 

foo.cpp:

#include "foo.hpp" 
#include <iostream> 

void Foo::bar() 
{ 
    std::cout << baz << std::endl; 
} 
1

Классы объявляются в заголовке, и большинство функций определяется в .cpp-файле. Этот инструмент помогает вам выполнить это разделение интерфейса от реализации.

Путь думать о разделении между заголовком и файл .cpp является:

  • Заголовки содержат заявления, которые будут использоваться другими файлами.
  • .cpp-файлы содержат реализацию.

Причина в том, что вы хотите, чтобы многие файлы могли использовать функциональные возможности, но вы хотите только определить эту функциональность в одном месте.

1

Заголовочные файлы объявляют/определяют класс. Он содержит функции-члены, данные членов, друзей и т. Д. Обычно он не включает много (если они есть) реализации (шаблоны являются исключением).

Файлы реализации (* .cpp) - это просто: они реализуют класс.

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

1

Файлы заголовков требуются компиляцией C++, потому что она практически не отличается от C#.

В C# связь между двоичными модулями всегда динамическая. В C++ существует разница между статической и динамической связью. Чтобы вдаваться в детали, мне потребовался бы полный час написания, но, скажем так, это самый короткий путь.

В C++ каждый .cpp-файл отдельно компилируется в объектный файл. Этот файл должен быть связан с другими, чтобы сформировать двоичный файл. Файл заголовка объявляет все подписи метода, необходимые файлу .cpp, в который он включен, который является файлом, который вызывает методы, определенные для класса.

В C# все файлы скомпилированы в один двоичный файл, т.е. компилятор всегда знает, какие классы и методы видны участнику, который вы компилируете.

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