Подключить класс из файла c
Чтобы добавить класс в проект Visual Studio C++, в обозревателе решений щелкните правой кнопкой мыши проект, выберите Добавить, а затем Класс. Откроется диалоговое окно Добавление класса.
Если по соглашению об именовании нужно использовать существующее имя, можно просто изменить регистр одной или нескольких букв в имени, так как C++ учитывает регистр. Например, хотя вы не можете назвать класс CDocument , можно назвать его cdocument .
Содержание раздела
Класс какого типа вы хотите добавить?
В диалоговом окне Добавление класса при развертывании узла Visual C++ на левой панели отображаются несколько групп установленных шаблонов. К этим группам относятся CLR, ATL, MFC и C++. При выборе группы на средней панели отображается список доступных шаблонов в этой группе. Каждый шаблон содержит необходимые для класса файлы и исходный код.
Чтобы создать класс, выберите шаблон в средней области, введите имя класса в поле Имя и нажмите Добавить. Открывается мастер добавления классов, где можно указать параметры для класса.
Дополнительные сведения о создании классов MFC см. в разделе Класс MFC.
Дополнительные сведения о создании классов ATL см. в разделе Простой объект ATL.
Шаблон Добавление поддержки ATL в MFC не создает класс, а настраивает проект для использования библиотеки ATL. Дополнительные сведения см. в разделе Поддержка ATL в проекте MFC.
Чтобы создать класс C++, который не использует MFC, ATL или CLR, воспользуйтесь шаблоном Класс C++ в группе C++ установленных шаблонов. Дополнительные сведения см. в разделе Добавление универсального класса C++.
Доступны два типа классов C++ на основе форм. Первый — класс CFormView — создает класс MFC. Второй создает класс Windows Forms для среды CLR.
Диалоговое окно "Добавление класса"
Диалоговое окно Добавление класса содержит шаблоны, которые позволяют выполнить следующие действия.
Открыть соответствующий мастер создания кода, если он доступен. Дополнительные сведения см. в разделе Добавление функциональных возможностей с помощью мастеров кода.
Автоматически создать новый класс, добавив в проект соответствующие файлы и исходный код.
Перейти к диалоговому окну Добавление класса можно из меню Проект, обозревателя решений или представления классов.
Добавление шаблонов классов
здесь program.cs (и почему я не могу переименовать этот файл ?)
и вот это Class2 что я хочу использовать в файле Class2.cs :
как некоторые ребята спросили, если они в той же сборке / том же проекте, Я предполагаю они были, потому что вот процедура, как они создаются:
честно говоря, я не знаю, есть ли они в та же сборка / проекта, но я думаю, что они были.
согласно вашему объяснению, вы не включили свой Class2.cs в вашем проекте. Вы только что создали необходимый файл класса, но не включили его в проект.
сделайте следующее, Чтобы преодолеть это,
просто Right click в вашем проекте - > [Add] - > [существующий элемент. ] Выберите Class2.cs и нажмите OK
проблема должна быть решена сейчас.
кроме того, при добавлении новых классов используйте эту процедуру,
Right click on project - > [Add] - > выберите необходимый элемент (например, класс, форму и т. д.)
было бы более полезно для нас, если бы мы могли видеть фактическое структура проекта, поскольку только классы не говорят так много.
при условии, что оба .cs-файлы находятся в одном проекте (если они находятся в разных проектах внутри одного решения, вам нужно добавить ссылку на проект, содержащий Class2.cs), вы можете нажать на Class2 вхождение в ваш код, который подчеркнут красным цветом и нажмите CTRL + . (период) или нажмите на синюю полосу, которая должна быть там. Первый вариант появится затем добавить соответствующий using заявление автоматически. Если такого меню нет, это может означать, что что-то не так со структурой проекта или отсутствует ссылка.
вы можете попробовать сделать Class2 public , но похоже, что это не может быть проблемой здесь, так как по умолчанию вы сделали internal class Class2 и так Class2 должен быть доступен, если оба живут в одном проекте/сборке. Если вы ссылаетесь на другую сборку или проект, в котором Class2 содержится, Вы должны сделать это public для доступа к нему, как internal классы не могут быть доступны вне их сборки.
что касается переименования: вы можете нажать Program.cs в обозревателе решений и нажмите F2, чтобы переименовать его. Затем откроется диалоговое окно с запросом, если класс Program сам и все ссылки на него также должны быть переименованы, что обычно является тем, что вы хотите. Или ты можешь просто . переименуйте класс Program в объявлении и снова откройте меню с маленькой синей полосой (или, опять же, CTRL + . ) и сделать то же самое, но он не будет автоматически переименовывать фактический соответственно.
Edit после вашего вопроса edit: я никогда не использовал эту опцию, которую вы использовали, но из быстрой проверки я думаю, что это действительно не внутри того же проекта. При добавлении новых классов в проект выполните следующие действия: В обозревателе решений щелкните правой кнопкой мыши созданный проект и выберите [Добавить] - > [класс] или [добавить] - > [новый элемент. ] а затем выберите "класс". Это автоматически сделает новый класс частью проекта и, следовательно, сборкой (сборка в основном является "конечным продуктом" после создания проекта). Для меня также есть ярлык Alt + Shift + C работа над созданием нового класса.
Да, я просто сделал ту же ошибку "noob" и нашел этот поток. Я фактически добавил класс к решению, а не к проекту. Вот как это выглядело:--1-->
На этом уроке мы рассмотрим работу классов с заголовочными файлами в языке С++.
Отделение объявления от реализации
Все классы, которые мы использовали до сих пор, были достаточно простыми, поэтому мы записывали методы непосредственно внутри тела классов, например:
К счастью, язык C++ предоставляет способ отделить «объявление» от «реализации». Это делается путем определения методов вне тела самого класса. Для этого просто определите методы класса, как если бы они были обычными функциями, но в качестве префикса добавьте к имени функции имя класса с оператором разрешения области видимости ( :: ).
Вот наш класс Date с конструктором Date() и методом setDate(), определенными вне тела класса. Обратите внимание, прототипы этих функций все еще находятся внутри тела класса, но их фактическая реализация находится за его пределами:
Просто, не так ли? Поскольку во многих случаях функции доступа могут состоять всего из одной строки кода, то их обычно оставляют в теле класса, хотя переместить их за пределы класса можно всегда.
Вот еще один пример класса с конструктором, определенным извне, со списком инициализации членов:
Классы и заголовочные файлы
На уроке о заголовочных файлах в языке С++ мы узнали, что объявления функций можно поместить в заголовочные файлы, чтобы затем иметь возможность использовать эти функции в нескольких файлах или даже в нескольких проектах. Классы в этом плане ничем не отличаются от функций. Определения классов могут быть помещены в заголовочные файлы для облегчения их повторного использования в нескольких файлах или проектах. Обычно, определение класса помещается в заголовочный файл с тем же именем, что у класса, а методы, определенные вне тела класса, помещаются в файл .cpp с тем же именем, что у класса.
Вот наш класс Date, но уже разбитый на файлы .cpp и .h:
Методы, определенные внутри тела класса, считаются неявно встроенными. Встроенные функции освобождаются от правила одного определения. А это означает, что проблем с определением простых методов (таких как функции доступа) внутри самого класса возникать не должно.
Методы, определенные вне тела класса, рассматриваются, как обычные функции, и подчиняются правилу одного определения, поэтому эти функции должны быть определены в файле .cpp, а не внутри .h. Единственным исключением являются шаблоны функций (но об этом чуть позже).
Параметры по умолчанию
Параметры по умолчанию для методов должны быть объявлены в теле класса (в заголовочном файле), где они будут видны всем, кто подключает этот заголовочный файл с классом.
Библиотеки
Разделение объявления класса и его реализации очень распространено в библиотеках, которые используются для расширения возможностей вашей программы. Вы также подключали такие заголовочные файлы из Стандартной библиотеки С++, как iostream, string, vector, array и другие. Обратите внимание, вы не добавляли iostream.cpp, string.cpp, vector.cpp или array.cpp в ваши проекты. Ваша программа нуждается только в объявлениях из заголовочных файлов, чтобы компилятор смог проверить корректность вашего кода в соответствии с правилами синтаксиса языка C++. Однако реализации классов, находящихся в Стандартной библиотеке С++, содержатся в предварительно скомпилированном файле, который добавляется на этапе линкинга. Вы нигде не встречаете этот код.
Вне программ с открытым исходным кодом (где предоставляются оба файла: .h и .cpp), большинство сторонних библиотек предоставляют только заголовочные файлы вместе с предварительно скомпилированным файлом библиотеки. На это есть несколько причин:
На этапе линкинга быстрее будет подключить предварительно скомпилированную библиотеку, чем выполнять перекомпиляцию каждый раз, когда она нужна.
Наличие собственных файлов, разделенных на объявление (файлы .h) и реализацию (файлы .cpp), является не только хорошей формой содержания кода, но и упрощает создание собственных пользовательских библиотек.
Заключение
Возможно, у вас возникнет соблазн поместить все определения методов класса в заголовочный файл внутри тела класса. Хотя это скомпилируется, но здесь есть несколько нюансов:
Во-первых, как упоминалось выше, это приведет к загромождению определения вашего класса.
Во-вторых, функции, определенные внутри класса, являются неявно встроенными. Большие функции, которые вызываются из многих файлов, могут способствовать, таким образом, «раздуванию» вашего кода.
Поэтому рекомендуется следующее:
Классы, используемые только в одном файле, и которые повторно не используются, определяйте непосредственно в файле .cpp, где они используются.
Классы, используемые в нескольких файлах или предназначенные для повторного использования, определяйте в заголовочном файле с тем же именем, что у класса.
Тривиальные методы (обычные конструкторы или деструкторы, функции доступа и т.д.) определяйте внутри тела класса.
Нетривиальные методы определяйте в файле .cpp с тем же именем, что у класса.
На следующих уроках большинство наших классов будут определены в файле .cpp со всеми методами, реализованными непосредственно в теле класса. Это делается для удобства и лаконичности примеров. В реальных проектах лучше, когда классы помещаются в отдельные файлы .cpp и .h.
В созданном проекте, можно добавить класс, в отдельном файле, который сгенерирует Visual Studio.
Правой кнопкой мыши выделите проект. Add. New Item.
Visual Studio сгенерировало класс. Пространство имен соответствует имени проекта. При желании, его можно удалить. Так же можно изменить название класса.
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace _0001
- class Counter
- ushort showStart;
- ushort showEnd;
- decimal price;
- public Counter( ushort arg0, ushort arg1, decimal arg2)
- showStart = arg0;
- showEnd = arg1;
- price = arg2;
- >
- public ushort ResultShow()
- return ( ushort )(showEnd-showStart);
- >
- public decimal Sum()
- return Math.Round(( decimal )(ResultShow()*price), 2);
- >
- >
- >
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace _0001
- class Counter
- ushort showStart;
- ushort showEnd;
- decimal price;
- public Counter( ushort arg0, ushort arg1, decimal arg2)
- showStart = arg0;
- showEnd = arg1;
- price = arg2;
- >
- public ushort ResultShow()
- return ( ushort )(showEnd-showStart);
- >
- public decimal Sum()
- return Math.Round(( decimal )(ResultShow()*price), 2);
- >
- >
- >
- using System;
- //подключить пространство имен
- using _0001;
- class Program
- public static int Main()
- Console.WriteLine( "оплата за электроэнергию\n" );
- Console.Write( "Введите начальные показания счетчика : " );
- ushort show_start = ushort .Parse(Console.ReadLine());
- Console.Write( "Введите конечные показания счетчика : " );
- ushort show_end = ushort .Parse(Console.ReadLine());
- Console.Write( "Введите цену за 1 кВт/ч : " );
- decimal price = decimal .Parse(Console.ReadLine());
- Counter C = new Counter(show_start, show_end, price);
- Console.WriteLine( "Сумма за электроэнергию : " , C.Sum());
- Console.ReadKey();
- return 0;
- >
- >
- using System;
- //подключить пространство имен
- using _0001;
- class Program
- public static int Main()
- Console.WriteLine( "оплата за электроэнергию\n" );
- Console.Write( "Введите начальные показания счетчика : " );
- ushort show_start = ushort .Parse(Console.ReadLine());
- Console.Write( "Введите конечные показания счетчика : " );
- ushort show_end = ushort .Parse(Console.ReadLine());
- Console.Write( "Введите цену за 1 кВт/ч : " );
- decimal price = decimal .Parse(Console.ReadLine());
- Counter C = new Counter(show_start, show_end, price);
- Console.WriteLine( "Сумма за электроэнергию : " , C.Sum());
- Console.ReadKey();
- return 0;
- >
- >
оплата за электроэнергию
Введите начальные показания счетчика : 0
Введите конечные показания счетчика : 100
Введите цену за 1 кВт/ч : 0,3084
Сумма за электроэнергию : 30,84
Читайте также: