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

Правильное использование шаблона в структуре
День добрый! Мне необходимо написать функцию, которая принимает другую функцию в качестве аргумента.
Использование метода not() jquery
Добрый день) Задача стоит такая: мне нужно для всех строк таблицы с и НЕ принадлежащих.
Использование метода getElementById()
Есть код : <html> <head> <script type="text/javascript"> function proverka(text_input) < .
4055 / 3308 / 924
Регистрация: 25.03.2012
Сообщений: 12,447
Записей в блоге: 1
В сишные структуры нельзя добавлять методы.
Регистрация: 05.06.2012
Сообщений: 280
ну а через указатели?
4055 / 3308 / 924
Регистрация: 25.03.2012
Сообщений: 12,447
Записей в блоге: 1
Я не пойму, тебе зачем?
Регистрация: 05.06.2012
Сообщений: 280
Привычка из C++.
4055 / 3308 / 924
Регистрация: 25.03.2012
Сообщений: 12,447
Записей в блоге: 1
Ну и пиши на своих чёртовых крестах! А в си действия над структурами осуществляются отдельными функциями
1 2 3 4 5 6
struct stroo{ int data; }; void init(struct stroo* self){ }
Регистрация: 05.06.2012
Сообщений: 280
1806 / 1269 / 936
Регистрация: 12.02.2013
Сообщений: 2,064
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#include void init() { printf("I Love C"); } typedef struct { int a; void (*init)(); } TClass; int main() { TClass a = {1, init}; a.init(); return 0; }
Регистрация: 05.06.2012
Сообщений: 280
printf(«I Love C»);
хахахах не, ну тут ты уже перегибаешь)))
Спасибо большое, еще был бы благодарен, если бы вы рассписали TClass a = ;
не совсем понял что произошло
1806 / 1269 / 936
Регистрация: 12.02.2013
Сообщений: 2,064
Сообщение от maxon887 
если бы вы рассписали TClass a = <1, init>;
не совсем понял что произошло1,>
На самом деле это всего-лишь структура у которой одно поле — это указатель на функцию. Т.е. никакими понятиями инкапсуляции, полиморфизма и наследования тут и не пахнет. Это всего лишь указатель на функцию.
TClass a = {1, init};
это инициализация полей структуры. Первым параметром задаётся a (значение 1), а вторым соответственно init (передаётся функция).
Добавлено через 3 минуты
А ещё нет доступа к членам структуры. Поэтому единственный выход это:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#include void GetA(int a) { printf("a = %d\n", a); } typedef struct { int a; void (*getA)(int); } TStruct; int main() { TStruct st = {1, GetA}; st.getA(st.a); return 0; }
Регистрация: 05.06.2012
Сообщений: 280
Тоесть, если у нас есть структура с некоторыми указателями на функции, то при ещё создании всё равно придёться инициализировать эти указатели, нужными мне функциями?
1806 / 1269 / 936
Регистрация: 12.02.2013
Сообщений: 2,064

Сообщение было отмечено maxon887 как решение
Решение
maxon887, естественно. Мало того, вам придётся передавать как минимум саму структуру функции, чтобы добраться до её полей.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
#include typedef struct class_t { int a; int b; int (*getA)(const struct class_t*); int (*getB)(const struct class_t*); void (*setA)(struct class_t*, int); void (*setB)(struct class_t*, int); } TClass; int GetA(const TClass* st) { return st->a; } int GetB(const TClass* st) { return st->b; } void SetA(TClass* st, int value) { st->a = value; } void SetB(TClass* st, int value) { st->b = value; } int main() { TClass st = {0, 0, GetA, GetB, SetA, SetB}; st.setA(&st, 10); st.setB(&st, 20); printf("a = %d\n", st.getA(&st)); printf("b = %d\n", st.getB(&st)); return 0; }
Как вызвать метод из структуры c
Кроме классов для создания своих типов данных можно использовать структуры , которые унаследованы языком С++ от языка Си. Структура в C++ представляет собой производный тип данных, который представляет какую-то определенную сущность, также как и класс. Нередко структуры применителько к С++ также называют классами. И в реальности различия между ними не такие большие. Структура также может определять переменные, функции, конструкторы, деструкторы. Однако обычно структуры служат для хранения каких-то общедоступных данных в виде публичных переменных. Для остальных сценариев используются классы.
Для определения структуры применяется ключевое слово struct , а сам формат определения выглядит следующим образом:
struct имя_структуры < компоненты_структуры >;
Имя_структуры представляет произвольный идентификатор, к которому применяются те же правила, что и при наименовании переменных. После имени структуры в фигурных скобках помещаются компоненты структуры — переменные и функции.
Например, определим простейшую структуру:
#include struct person < unsigned age; std::string name; >; int main()
Здесь определена структура person , которая имеет две переменных: name (представляет тип string) и age (представляет тип unsigned).
После определения структуры мы можем ее использовать. Для начала мы можем определить объект структуры — по сути обычную переменную, которая будет представлять выше созданный тип. Также после создания переменной структуры можно обращаться к ее элементам — получать их значения или, наоборот, присваивать им новые значения. Для обращения к элементам структуры используется операция «точка»:
имя_переменной_структуры.имя_элемента
По сути структура похожа на класс, то есть с помощью структур также можно определять сущности для использования в программе. В то же время все члены структуры, для которых не используется спецификатор доступа (public, private), по умолчанию являются открытыми (public). Тогда как в классе все его члены, для которых не указан спецификатор доступа, являются закрытыми (private).
Кроме того мы можем инициализировать структуру, присвоив ее переменным значения с помощью синтаксиса инициализации:
person tom< 34, "Tom" >;
Инициализация структур аналогична инициализации массивов: в фигурных скобках передаются значения для элементов структуры по порядку. Так как в структуре person первым определено свойство, которое представляет тип unsigned — число, то в фигурных скобках вначале идет число. И так далее для всех элементов структуры по порядку.
При этом любой класс мы можем представить в виде структуры и наоборот. Возьмем, к примеру, следующий класс:
#include class Person < public: Person(std::string name, unsigned age): name, age < >void print() < std::cout private: std::string name; unsigned age; >; int main() < Person bob; bob.print(); >
Данный класс определяет сущность человека и содержит ряд приватных и публичных переменных и функции. Вместо класса для определения той же сущности мы могли бы использовать структуру:
#include struct person < public: person(std::string name, unsigned age): name, age < >void print() < std::cout private: std::string name; unsigned age; >; int main() < person bob; bob.print(); >
И в плане конечного результата программы мы не увидели бы никакой разницы.
Когда использовать структуры? Как правило, структуры используются для описания таких данных, которые имеют только набор публичных атрибутов — открытых переменных. Например, как та же структура person, которая была определена в начале статьи. Иногда подобные сущности еще называют аггрегатными классами (aggregate classes).
Структуры, вызов метода
Здравствуйте, недавно начал изучать язык С++, до этого работал с языком pawn ( используется как встроенный язык программирования для AMXX и SA-MP ). Язык очень схож с С++, поэтому осваивать С++ я начал быстро. Но я нашел для себя несколько неудобным то, что большая часть кода находиться в int main().
Я пока-что плохо освоил структуры, поэтому заранее хочу извиниться, если заголовок сообщение я написал не верно. Вопрос в следующем, могу ли я создать что-то вроде структуры ( struct ), так, что бы сама программа никак не использовала код в нем, но его можно было позже привести в действие.
Пример: Вот у меня сейчас есть код в int main()
1 2 3 4 5
int main(int argc, char *argv[]) { setlocale(LC_CTYPE, "russian"); cout "Привет" endl; }
Я хочу создать что-то вроде структуры, в которую я помещу часть кода из int main(). Пример:
1 2 3 4 5 6 7 8 9
int main(int argc, char *argv[]) { setlocale(LC_CTYPE, "russian"); } struct Privet() { cout "Привет" endl; }
Но что бы эта структура была задействована только при определенном условии, например:
1 2 3 4 5 6 7 8 9 10
int main(int argc, char *argv[]) { setlocale(LC_CTYPE, "russian"); std::string privet; getline(cin, privet); if(privet == "privet") { //тут нужна функция, которая задействует эту структуру } }
Как это можно сделать, и можно ли вообще?
P.S. — Функцию struct я использовал для примера, так как не знаю нужной. Мне далеко не обязательно использовать именно эту функцию.
Заранее спасибо за все ответы!
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Вызов метода объекта внутри определения метода другого объекта(вложенные классы)
Как мне вызвать метод объекта slider класса Slider внутри определения метода объекта класса.
Структуры. Вызов данных структуры по указателю. с++
Условие задачи: Помогите, пожалуйста, с как реализовать печать вообще не представляю.
Вызов метода из метода
Можно ли вызвать метод из метода. Это программа не работает #include<iostream> using namespace.
Вызов метода
Друзья подскажите пожалуйста! Есть родительский класс TModel, в нем есть метод Euler2(), как это.
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
структура это тип данных который может содержать переменные, методы, конструкторы, деструкторы и тд.
метод может быть объявлен в структуре
что бы вызвать метод структуры нужно создать объект с типом созданной структуры и вызвать
1 2 3 4 5 6 7 8 9 10 11
#include using namespace std; struct A { void show() { cout "hello" endl; } }; int main() { A obj; obj.show(); }
как то так
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Вызов метода
Добрый вечер, я не знаю c++, пытаюсь разобраться, знаком с c#, delphi. Создаю библиотеку для c#.

Вызов метода наследника
Доброго времени суток. Имеется 2 класса: class Text< public: Text* txt; int n;.

Вызов метода класса
Суть в том, есть какой-то класс и его методы. Нужно , чтобы при определенных условиях вызывался.
Структуры в C++
Перед тем как приступить к изучению классов в C++, мы рассмотрим тип данных подобный классу — структуры. Структуры полезны, когда нам надо объединить несколько переменных с разными типами под одним именем. Это делает программу более компактной и более гибкой для внесения изменений. Также структуры незаменимы, когда необходимо сгруппировать некоторые данные, например, запись из базы данных или контакт из книги адресов. В последнем случае структура будет содержать такие данные контакта как имя, адрес, телефон и т.п.
Синтаксис
В процессе написания программы может потребоваться сгруппировать разные данные. Например, вы захотите хранить координаты некоторых объектов и их имена. Вы можете сделать это с помощью массивов:
int x_coor[10]; int y_coor[10]; string names[10];
Но так как каждый элемент одного массива связан с другим, то при изменении одного, придется менять остальные тоже. И чем больше данных вам надо объединить, тем сложнее будем такая программа. Поэтому для объединения разных данных используются структуры.
Формат объявления структуры выглядит так:
struct Car < int x_coor; int y_coor; string name; >;
Объявляя структуру, мы вводим в программу наш собственный тип данных, которым можем пользоваться, так же как и стандартными типами, т.е. объявление переменной нашего типа будет таким:
structName variableName;
structName — имя структуры, variableName — имя переменной.
x_coor, y_coor и name — поля нашей структуры. При объявлении структуры мы создаем составной тип данных, с помощью которого можно создавать переменные, которые сочетают в себе несколько значений (например, координаты и имя). Внутри структуры каждому полю мы даем имя, чтобы потом обращаться к этому значению по его имени.
Для доступа к полям структуры используется точка:
// объявляем переменную Car myCar; // и используем её myCar.x_coor = 40; myCar.y_coor = 40; myCar.name = "Porche";
Как видите, вы можете хранить в структуре столько полей, сколько вам угодно и они могут иметь разные типы.
Рассмотрим пример, демонстрирующий сочетание массивов и структур.
#include using namespace std; struct PlayerInfo < int skill_level; string name; >; using namespace std; int main() < // как и с обычными типами, вы можете объявить массив структур PlayerInfo players[5]; for (int i = 0; i < 5; i++) < cout > players[ i ].name; cout > players[ i ].skill_level; > for (int i = 0; i < 5; ++i) < cout >
Так же как и с простыми типами (int, например), вы можете создавать массивы структур. А с каждым элементом этого массива работать так же как и с отдельной переменной. Для доступа к полю name первого элемента массива структур, просто напишите:
players[ 0 ].name
Структуры и функции
Очень часто требуется писать функции, которые принимают структуры в качестве аргумента или возвращают структуру. Например, если вам надо написать небольшую космическую аркаду, вам может понадобится функция для инициализации нового противника:
struct EnemySpaceShip < int x_coordinate; int y_coordinate; int weapon_power; >; EnemySpaceShip getNewEnemy();
Функция getNewEnemy должна возвращать структуру с инициализированными полями:
EnemySpaceShip getNewEnemy ()
На самом деле эта функция вернет копию созданной локальной переменной ship. Это значит, что каждое поле структуры будет скопировано в новую переменную. В нашем случае копирование малого количества полей не заметно, но когда вы работаете с большими объемами данных нужно избегать лишних действий, подробнее об этом поговорим в статье про указатели.
Таким образом, для получения новой переменной будем использовать следующий код:
EnemySpaceShip ship = getNewEnemy();
Теперь эту переменную можно использовать как обычную структуру.
Передавать структуры в функцию можно так:
EnemySpaceShip upgradeWeapons (EnemySpaceShip ship)
Когда мы передаем структуру в функцию, она копируется, так же как и при возвращении структуры. Поэтому любые изменения сделанные внутри функции будут потеряны, поэтому мы возвращаем структуру после изменения.
ship = upgradeWeapons(ship);
Когда вызывается функция, переменная ship копируется и изменяется в функции, а когда переменная возвращается, она снова копируется и перезаписывает поля оргинальной переменной.
И наконец, программа для создания и улучшения одного корабля:
struct EnemySpaceShip < int x_coordinate; int y_coordinate; int weapon_power; >; EnemySpaceShip getNewEnemy() < EnemySpaceShip ship; ship.x_coordinate = 0; ship.y_coordinate = 0; ship.weapon_power = 20; return ship; >EnemySpaceShip upgradeWeapons(EnemySpaceShip ship) < ship.weapon_power += 10; return ship; >int main()
Указатели
Если вы работаете с указателем на структуру, то для доступа к переменным надо использовать оператор «->» вместо точки. Все свойства указателей не изменяются. Пример:
#include using namespace std; struct xampl < int x; >; int main() < xampl structure; xampl *ptr; structure.x = 12; ptr = &structure; coutx; cin.get(); >