C ++ - .h и .cpp - PullRequest
       43

C ++ - .h и .cpp

0 голосов
/ 15 апреля 2011

Если у меня есть файл .h, который содержит следующее, например:

class A
{
...
}

Обратите внимание, что здесь нет настроенного конструктора.

Теперь в файле .cpp можно написать следующее:

A
{
...
}

Другими словами, можно ли не использовать конструктор после имени класса следующим образом?

A::A()
{
...
}

Спасибо.

Ответы [ 5 ]

3 голосов
/ 15 апреля 2011

Если ваш вопрос заключается в том, можете ли вы использовать A {} для определения конструктора, нет, вам нужно использовать синтаксис A :: A () {...} для конструктора, если вы определяете его в cpp файл.

Если вы спрашиваете, нужен ли вам конструктор, нет, он вам не обязательно нужен, компилятор предоставит вам значение по умолчанию.

Я должен сказать, что если вы делаете конструктор в определении класса, вы можете использовать A () {...}, например,

class A
{
public:
  A(){}
};
2 голосов
/ 15 апреля 2011

Я полагаю, что ответ на ваш вопрос "Нет".Но это довольно запутанный вопрос.Синтаксис, который вы предлагаете для содержимого файла .cpp, явно несовместим.

0 голосов
/ 15 апреля 2011

Нет.После того, как вы определили класс A таким образом, компилятор ожидает, что A запустит один из

A MyObject;
A MyOtherObject = { /* initial values */ }; // C style since there's no ctor
A MyFunction();
A MyFunction() { return MyObject; }

или, возможно, такой вариант, как

A* MyPointer;
A& MyReferemce = MyObject;

Как видите, компилятор ожидаетВы заявляете что-то после A.Но у вас есть A {.Это просто неправильно: вы начали декларацию, но никогда не называли то, что объявляете.

0 голосов
/ 15 апреля 2011

Можно ли не использовать конструктор после имени класса

Поскольку классы становятся длиннее и сложнее, смешивание определений и деталей реализации усложняет управление и работу с классомс.

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

0 голосов
/ 15 апреля 2011

Да, можете. Если я правильно понял ваш вопрос.

ЗАГОЛОВОК ФАЙЛ

#include &lt iostream&gt

using namespace std;

class A{
public:
        A();
        void func();
};

CPP FILE


#include "h.hpp"
<p>
using namespace std;
</p>
A::A(){cout &lt&lt "Constructor" &lt&lt endl;}
<p>
int main(){
A a;
return 0;
}
</p>
...