Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2013, 12:44   #1
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию Файловая система

Как разместить описание классов в заголовочный файл, и для чего это вообще нужно? А также как отделить реализации функций от головной программы и разместить их в
отдельном файле *.cpp?
Куда нажимать я знаю, а вот как их правильно расположить и оформить нет((

Выдает такую ошибку - Ошибка 1 error C1083: Не удается открыть файл включение: Верхний колонтитул1.h: No such file or directory d:\мои документы\visual studio 2010\Projects\Лаба7\Лаба7\Лаба7.cpp 4 1 Лаба7

Последний раз редактировалось Diana528; 13.10.2013 в 13:08.
Diana528 вне форума Ответить с цитированием
Старый 13.10.2013, 13:36   #2
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

А что конкретно вы имеете, в что, вставили пробел в название заголовочного файла? (строго говоря, файлам и переменным даже кириллические названия давать нельзя, хотя VisualStudio их проглатывает, а пробелы в принципе нельзя делать)

Вот вам парочка корректных примеров:

Класс:
myclass.h
Код:
#ifndef MYCLASS_H
#define MYCLASS_H


class MyClass
{
public:
	MyClass();
	Fun();
private:
	int MyValue;
}

#endif
myclass.cpp
Код:
#include "myclass.h"

MyClass::MyClass()
{
	MyValue=0;
}

int MyClass::Fun()
{
	return MyValue;
}


Просто функции:
myfunctions.h
Код:
#ifndef MYFUNCTIONS_H
#define MYFUNCTIONS_H


int fun1();
int fun2(int);


#endif
myfunctions.cpp
Код:
#include "myfunctions.h"

int fun1()
{
//do somthing
}

int fun2(int a)
{
//do somthing else
}

По поводу вопроса "для чего это нужно".

1. Так красивее.
2. Понятнее.
3. Просто положено так делать.
4. Говорят так быстрее компиляция идет.
5. Да и инкапсуляция обязывает.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 13.10.2013 в 13:42.
ROD вне форума Ответить с цитированием
Старый 13.10.2013, 13:45   #3
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

я делаю тоже самое, но я немогу поменять имя своего заголовочного файла, как это сделать? он у меня не менятеся

вот что делаю я:

Класс Верхний колонтитул.h

Код:
//MyDll.h
#ifndef MYDLLH
#define MYDLLH

class Medicine//Класс Лекарство
{
  private: 
      static int count; 
      char name[lname];  
      int price; 
      friend class Pharmacy;
      
  public:  
         Medicine(); 
         ~Medicine();
         
void set_name(const char*); 
char* get_name();

void set_price(int); 
int get_price(); 

void show(); 
void read();
};

class Remedy: public Medicine//Класс Лечебное средство
{   private: 
       char type[lname]; 
       int num;
    public: 
       void set_type(const char *); 
       char *get_type();
       void set_num(int); 
       int get_num();
       void show(); 
       void read();
};

#define max_nmedicines 10
class Pharmacy//Класс Аптека
{      private: 
       char names [lname]; 
       char city[lname]; //
       int nmedicines; 
       Remedy *medicines[max_nmedicines];
public:  Pharmacy();
void set_names(const char *); char *get_names();
void set_city(const char *); char *get_city();
void show();
void add_medicines(Remedy); void del_last_medicines(); void list_medicines();
Remedy *find_name(char *name);
};

Pharmacy::Pharmacy() {nmedicines=0;};
void Pharmacy::set_names(const char *r) 
{if (strlen(r) <= lname) strcpy(names, r);};
char *Pharmacy::get_names() 
{return &names[0];};
void Pharmacy::set_city(const char *r) 
{if (strlen(r) <= lname) strcpy(city, r);};
char *Pharmacy::get_city() 
{return &city[0];};
void Pharmacy::show() 
{ cout<<endl;
     cout<<" Название аптеки="<<names<<endl<<" Город="<<city<<endl; cout<<endl;};
void Pharmacy::add_medicines(Remedy b) 
{nmedicines=nmedicines+1; medicines[nmedicines-1]  =  new  Remedy;
*medicines[nmedicines-1]=b;};
void Pharmacy::del_last_medicines() 
{if (nmedicines >=1) {nmedicines=nmedicines-1;}
else {cout<<"Pharmacy::del_last_medicine: error";};};
void Pharmacy::list_medicines() {int  i;  cout<<endl<<"Список лекарств:"<<endl; 
for  (i=1; i<=nmedicines; i++) medicines[i-1]->show();}; 

Remedy *Pharmacy::find_name(char *name)
{ int i;    Remedy *x; x=NULL;
for (i=1; i<=nmedicines; i++)
{
if  (  strcmp(name,  medicines[i-1]->name)== 0  )  {  x=medicines[i-1];
}
};
return x;
}
#endif
Исходный код1.cpp

Код:
#include "stdafx.h"

using namespace std;
using namespace System;

int Medicine::count = 0; 

Medicine::Medicine(){count++;};
Medicine::~Medicine(){count--; };

void Medicine::set_name(const char*r) 
{if (strlen(r) <= lname) strcpy(name, r);};
char *Medicine::get_name() 
{return &name[0];};
void Medicine::set_price(int r) 
{price=r;};
int Medicine::get_price() 
{return price;};
void Medicine::show()
{cout<<" Название лекарства= "<<name<<" Цена= "<<price;};
void Medicine::read() 
{cout<<"Введите название лекарства: "; cin>>name;
cin.getline(name, lname);
cout<<"Введите стоимость лекарства: "; cin>>price;
cin.ignore();};

void Remedy::set_type(const char *r) 
{if (strlen(r) <= lname) strcpy(type, r);};
char *Remedy::get_type() 
{return &type[0];};
void Remedy::set_num(int r) 
{num=r;};
int Remedy::get_num() 
{return num;};
void Remedy::show() 
{Medicine::show(); cout<<" Тип="<<type<<" Номер лекарства="<<num<<endl;};
void Remedy::read() 
{Medicine::read();

cout<<"Введите тип лечебного средства: "; 
cin.getline(type, lname);
cout<<"Введите номер лечебного средства: "; cin>>num; cin.ignore(); cout<<endl;};

Pharmacy::Pharmacy() {nmedicines=0;};
void Pharmacy::set_names(const char *r) 
{if (strlen(r) <= lname) strcpy(names, r);};
char *Pharmacy::get_names() 
{return &names[0];};
void Pharmacy::set_city(const char *r) 
{if (strlen(r) <= lname) strcpy(city, r);};
char *Pharmacy::get_city() 
{return &city[0];};
void Pharmacy::show() 
{ cout<<endl;
     cout<<" Название аптеки="<<names<<endl<<" Город="<<city<<endl; cout<<endl;};
void Pharmacy::add_medicines(Remedy b) 
{nmedicines=nmedicines+1; medicines[nmedicines-1]  =  new  Remedy;
*medicines[nmedicines-1]=b;};
void Pharmacy::del_last_medicines() 
{if (nmedicines >=1) {nmedicines=nmedicines-1;}
else {cout<<"Pharmacy::del_last_medicine: error";};};
void Pharmacy::list_medicines() {int  i;  cout<<endl<<"Список лекарств:"<<endl; 
for  (i=1; i<=nmedicines; i++) medicines[i-1]->show();}; 

Remedy *Pharmacy::find_name(char *name)
{ int i;    Remedy *x; x=NULL;
for (i=1; i<=nmedicines; i++)
{
if  (  strcmp(name,  medicines[i-1]->name)== 0  )  {  x=medicines[i-1];
}
};
return x;
}

Последний раз редактировалось Stilet; 13.10.2013 в 14:23.
Diana528 вне форума Ответить с цитированием
Старый 13.10.2013, 14:13   #4
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

Далее

Головная программа Лаба7.cpp

Код:
// Лаба7.cpp: главный файл проекта.

#include "stdafx.h"
#include<locale>
#include "Верхний колонтитул1.h"
#define lname 40
#include<iostream>

using namespace std;
using namespace System;

int main()//Главная программа
{setlocale(LC_ALL, "Russian");
Pharmacy t;
t.set_city("Алматы"); t.set_names("Аптека");
t.show();
Remedy x;
int i, n=5;
char name[5]; for (i=1;i<=n; i++) {name[i-1]=' ';};
for (i=1; i<=n; i++)
{
itoa(i, name, 10);
x.set_name(name); x.set_price(i);
t.add_medicines(x);
};
char name_medicines[30]; cout<<"Введите название искомого лекарства: "; cin>>name_medicines;
Remedy  *f;  f=t.find_name(name_medicines);  if  (f != NULL)  {cout<<"Выбранное лекарство: "<<name_medicines<<endl; f->show();}
else {cout<<"Лекарство отсуствует"<<endl;};
t.list_medicines();
cout<<endl;
cout<<"size Remedy="<<sizeof(Remedy)<<" size t="<<sizeof(t);
cout<<endl;
system("pause");
     }
Diana528 вне форума Ответить с цитированием
Старый 13.10.2013, 15:24   #5
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

как перевести на английский?
Diana528 вне форума Ответить с цитированием
Старый 13.10.2013, 17:39   #6
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Файл переименовать.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 13.10.2013, 21:20   #7
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

у меня не переименовывается, теперь скачиваю английскую версию
Diana528 вне форума Ответить с цитированием
Старый 13.10.2013, 21:45   #8
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
Сообщение от Diana528 Посмотреть сообщение
у меня не переименовывается, теперь скачиваю английскую версию
0_0 что-то я не понимаю или вы меня не понимаете.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 14.10.2013, 15:08   #9
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

я не могу переименовать "Верхний колонтитул1.h" на английский язык, как это сделать?
Diana528 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файловая система Донат Общие вопросы C/C++ 3 22.04.2012 22:32
файловая система Hell Knight Общие вопросы C/C++ 2 09.12.2011 15:11
Файловая система androidvsu Общие вопросы по Java, Java SE, Kotlin 3 13.10.2010 19:04
Файловая система на с++ Nikolai2010 Общие вопросы C/C++ 4 17.03.2010 13:18
Файловая система student_63 Win Api 1 12.04.2008 20:29