powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / ввод через cin нескольких параметров в один метод класса
16 сообщений из 16, страница 1 из 1
ввод через cin нескольких параметров в один метод класса
    #38047093
Violet-n-red
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
возможно ли такое? ибо компилятор говорит, что так делать нельзя. хотелось бы узнать как правильно это делается.

пример кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
class phone
{
	int number;
	char name[10];
public:
	void input(int n,char c[10]){n=number;name[10]=c[10];}
	int get_number(){return number;}
	char get_name(){return name[10];}
};
int main()
{
	phone *ph;
	ph=new phone;
	cin>>ph->input(); //это не правильно. не знаю ,как написать.


возможно ,стоит переоформить сам метод?
...
Рейтинг: 0 / 0
ввод через cin нескольких параметров в один метод класса
    #38047134
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно стоит почитать какую-то книжку на предмет изучения базовых принципов построения потоков ввода-вывода в C++.
...
Рейтинг: 0 / 0
ввод через cin нескольких параметров в один метод класса
    #38047142
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вы планируете вводить номер и имя (только) из стандартного ввода, то зачем вам аргументы у input()?
И зачем сам метод, если задача - для конструктора?
...
Рейтинг: 0 / 0
ввод через cin нескольких параметров в один метод класса
    #38047247
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
напиши метод:
Код: sql
1.
2.
3.
4.
5.
6.
void phone::set_data_from_keyboard()
{
       cout<<"Number=";
       cin>>number;
       ...
}
...
Рейтинг: 0 / 0
ввод через cin нескольких параметров в один метод класса
    #38047976
Violet-n-red
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
воспользую пока последним советом.
просто хотелось знать можно ли посылать в метод несколько аргументов(без их ввода из самого метода), чтоб была возможность выбрать способа ввода(из стандартного потока ввода, из каких-либо функций, из других переменных)
...
Рейтинг: 0 / 0
ввод через cin нескольких параметров в один метод класса
    #38048046
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Violet-n-redвоспользую пока последним советом.
просто хотелось знать можно ли посылать в метод несколько аргументов(без их ввода из самого метода), чтоб была возможность выбрать способа ввода(из стандартного потока ввода, из каких-либо функций, из других переменных)Пиши еще методы:
Код: plaintext
1.
2.
3.
4.
5.
void phone::set_data_from_file()
{}
void phone::set_data_from_telegraph()
{}
ну и т.д.


Можно посылать в метод несколько аргументов, только ИМХО это неправильно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
void phone::set_data(int n, ...)
{    
      number=n;
      ...
}
// и тогда в 10 разных местах твоей программы будет:
      int temp1;
      int temp1;
      ...
      cin>temp1;
      cin>temp1;
      ...
      ph->set_data(temp1, temp2, ...);

Когда через пол года придется добавить в класс phone еще данные, то придется переписать phone::set_data(int n, ...) и отыскать все 10 мест в программе и переписать еще и там...
В первом варианте придется периписать один метод void phone::set_data_from_keyboard(). Остальная часть программы останется неизменной.
...
Рейтинг: 0 / 0
ввод через cin нескольких параметров в один метод класса
    #38049191
Violet-n-red
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в общем картна ясна. благодарю за объяснение!
...
Рейтинг: 0 / 0
ввод через cin нескольких параметров в один метод класса
    #38050509
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Violet-n-red,

Вы начали правильно потом свернули не туда. Правильно это делается так:

Код: plaintext
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.
40.
41.
42.
43.
44.
45.
46.
47.
48.
#include <iostream>
#include <string>

namespace local { namespace phonebook {

	struct entry {
		int number;
		std::string name;

		entry(): number(0) {}
		entry(int num, const std::string & name): number(num), name(name) {}
	};

	template <class ostreamT>
	ostreamT & operator<<(ostreamT & stream, const entry & entry)
	{
		stream << entry.number;
		stream << entry.name;
		return stream;
	}

	template <class istreamT>
	istreamT & operator>>(istreamT & stream, entry & entry)
	{
		stream >> entry.number;
		stream >> entry.name;
		return stream;
	}

} }

int main(int argc, char ** argv)
{
	using local::phonebook::operator<<;
	using local::phonebook::operator>>;

	local::phonebook::entry entry;

	std::cout << "Заполните поля: " << std::endl;
	std::cin >> entry;
	std::cout << "Считано: " << std::endl;
	std::cout << entry;

	int key;
	std::cin >> key;

	return 0;
}
...
Рейтинг: 0 / 0
ввод через cin нескольких параметров в один метод класса
    #38050704
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sherzod_
Код: plaintext
1.
2.
	using local::phonebook::operator<<;
	using local::phonebook::operator>>;


Это еще зачем?
Это было бы нужно только в древних компиляторах без argument dependent lookup. Но там скорее всего и неймспейсов нет :)
...
Рейтинг: 0 / 0
ввод через cin нескольких параметров в один метод класса
    #38050762
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskysherzod_
Код: plaintext
1.
2.
	using local::phonebook::operator<<;
	using local::phonebook::operator>>;


Это еще зачем?
Это было бы нужно только в древних компиляторах без argument dependent lookup. Но там скорее всего и неймспейсов нет :)
А вдруг кто-то решит сделать вот так:
Код: plaintext
1.
(operator>>)(std::cin, entry);
...
Рейтинг: 0 / 0
ввод через cin нескольких параметров в один метод класса
    #38050995
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sherzod_Anatoly Moskovskyпропущено...

Это еще зачем?
Это было бы нужно только в древних компиляторах без argument dependent lookup. Но там скорее всего и неймспейсов нет :)
А вдруг кто-то решит сделать вот так:
Код: plaintext
1.
(operator>>)(std::cin, entry);


Я глубоко сомневаюсь что кому-то может понадобиться взятие адреса у неквалифицированного оператора >> (с учетом что их в С++ объявлено множество только в стандартной библиотеке).

Даже необходимость просто явного вызова под вопросом:
Код: plaintext
1.
operator>>(std::cin, entry);


Хотя в последнем случае ADL работает нормально, т.к. аргументы доступны.

Короче. В любом случае, загромождать этими неотносящимися к делу конструкциями учебную программу не стоит.
...
Рейтинг: 0 / 0
ввод через cin нескольких параметров в один метод класса
    #38051057
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

Ваши сомнения безосновательны (еще и потому что скобки в данном случае были показаны как средство запрета ADL, а не взятие адреса). Как вы сами сказали именно операторов вводы вывода в потоки объявлено великое множество и не только в стандартной библиотеке.

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

Короче. Убедить вам меня не удастся поэтому можете сразу переходить к оскроблениям :) (с).
...
Рейтинг: 0 / 0
ввод через cin нескольких параметров в один метод класса
    #38051072
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sherzod_,

ok, не адрес, а запрет ADL.
Поясните на примере зачем он нужен.
...
Рейтинг: 0 / 0
ввод через cin нескольких параметров в один метод класса
    #38051083
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

я честно говоря не знаю зачем он нужен. Предполагаю что для разрешения конфликтов имен. А привел я его в качестве конструкции показывающей что код _без_ локального using не равнозначен коду _с_ ним. Зачем использую сам локальный using я уже пояснил.
...
Рейтинг: 0 / 0
ввод через cin нескольких параметров в один метод класса
    #38052561
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
	template <class ostreamT>
	ostreamT & operator<<(ostreamT & stream, const entry & entry)
	{
		stream << entry.number;
		stream << entry.name;
		return stream;
	}


А нельзя избежать как-то перечисления всех членов в операторе?
А то ведь всегда можно какой-то забыть при изменении класса.
...
Рейтинг: 0 / 0
ввод через cin нескольких параметров в один метод класса
    #38052624
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
избежать перечисления
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
	template <class ostreamT>
	ostreamT & operator<<(ostreamT & stream, const entry & entry)
	{
		stream << entry.number;
		stream << entry.name;
		return stream;
	}


А нельзя избежать как-то перечисления всех членов в операторе?
А то ведь всегда можно какой-то забыть при изменении класса.Неа, нельзя. И хорошо, что нельзя. Если есть много классов выводимых в потоки лучше подумать над использованием какой-нибудь надстройки вроде google::protobuf. Есть еще различные библиотеки сериализации предлагающие рулет из макросов вроде MFC, но имхо это разовый код, не разобраться потом что к чему. Хотя можно попробовать занятие интересное.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / ввод через cin нескольких параметров в один метод класса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]