Форум программистов, компьютерный форум CyberForum.ru

Как передать в функцию несколько аргументов, и другие глупые вопросы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
h3mbr0
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 125
06.06.2012, 15:04     Как передать в функцию несколько аргументов, и другие глупые вопросы #1
Доброго времени суток. Накопилось несколько вопросов, от простых до очень простых, и все же нужную информацию по ним не нашел. Глупо для каждого создавать свою тему, поэтому задам все в одной)

Итак:
1)Как передать в функцию неопределенное число аргументов, к примеру:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void Insert(int value) {
        ListItem *prev = NULL,
            *succ = first;
        while(succ != NULL && succ->item < value) {
            prev = succ;
            succ = succ->next;
        }
        ListItem *newItem = new ListItem(value, succ);
        if(succ == NULL)
            last = newItem;
        if(prev == NULL)
            first = newItem;
        else
            prev->next = newItem;
        itemsCount++;
    }
Что нужно сделать для реализации передачи нескольких(неопределенного кол-ва) аргументов функции Insert? к примеру CList::Insert(1,2,3,4,5);

2)Можно ли наследовать сразу несколько классов (объеденять их)?

3)Есть ли разница при инициализации:
C++
1
2
3
4
class myClass {
public:
static int count=0;
};
и
C++
1
myClass::count=0
4)Каким образом можно создать таск(таймер)? К примеру что бы через 15 секунд выполнилась некая функция myFunc, при том что программа продолжала работать, а не засыпала дожидаясь истечения 15 секунд.

5)Какая разница при передачи например
C++
1
void myFunc(myClass &s)
и
C++
1
void myFunc(myClass *s)
путаюсь со ссылкоуказателеразыменовывателями

6) Какая разница между const *char, const char*? Насколько я понял разница между const char* и char const* нет, но что такое const *char? Насколько я понял(прочитал) это констатный указатель на строку, но как он используется, и корректен ли он вообще? ведь при компиляции вылезают аж 3 ошибки.

7)Когда используются extern и static? Насколько я понял (опять же где то прочитал) например extern int i; объявляет что то вроде прототипа, позволяющего обращаться к этому самому i. А static создает локальную переменную, невидимую другим объектам, и перекрывающую другие глобальные объекты, и все же везде написано по разному, и я до конца так и не понял для чего и когда нужно использовать эти ключевые.. эти слова вообщем

8)Как заставить компилятор(visual studio) компилировать под 64 разрядную систему? ибо он всегда лепит под x32

9)И наконец как высвободить память(удалить) из под переменных, объектов, выделенных не в куче, т.е.
если
C++
1
myClass *mySuperClass
удаляется
C++
1
delete mySuperClass
то как удалить
C++
1
myClass mySuperClass
?

Извиняюсь за не особо информативное название треда, и заранее благодарю за ответы
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2012, 15:04     Как передать в функцию несколько аргументов, и другие глупые вопросы
Посмотрите здесь:

Как передать указатель на функцию в функцию C++
Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? C++
C++ Передать в функцию с переменным числом параметров УКАЗАТЕЛИ на другие функции
Хочу передать в функцию несколько разнотипных массивов. Можно так делать? C++
Как передать функцию в функцию? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
06.06.2012, 16:27     Как передать в функцию несколько аргументов, и другие глупые вопросы #2
Цитата Сообщение от h3mbr0 Посмотреть сообщение
1)Как передать в функцию неопределенное число аргументов
Использовать многоточие в параметрах функции
Код
int Insert(...);  // принимает неопределенное число аргументов
7) Переменная static инициализируется только один раз и если она в функции то при выходе не удаляется из памяти (она просто не видна.)

Все. Больше ничего не знаю

Добавлено через 5 минут
Цитата Сообщение от h3mbr0 Посмотреть сообщение
3)Есть ли разница при инициализации:Код C++
1
2
3
4 class myClass {
public:
static int count=0;
};
Так вроде бы нельзя инициализировать
Код
int myClass::count = 0;
h3mbr0
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 125
06.06.2012, 16:40  [ТС]     Как передать в функцию несколько аргументов, и другие глупые вопросы #3
Цитата Сообщение от g-h Посмотреть сообщение
Использовать многоточие в параметрах функции
Код
int Insert(...);  // принимает неопределенное число аргументов
это я понял.. но вот как их потом выловить?
7)
Так вроде бы нельзя инициализировать
Код
int myClass::count = 0;
да.. опечатался... и все же, почему нельзя инициализировать в классе?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
06.06.2012, 16:52     Как передать в функцию несколько аргументов, и другие глупые вопросы #4
Цитата Сообщение от h3mbr0 Посмотреть сообщение
1)Как передать в функцию неопределенное число аргументов, к примеру:
http://cplusplus.com/reference/clibr...tdarg/va_list/

Цитата Сообщение от h3mbr0 Посмотреть сообщение
2)Можно ли наследовать сразу несколько классов (объеденять их)?
читай про множественное наследование

Цитата Сообщение от h3mbr0 Посмотреть сообщение
6) Какая разница между const *char, const char*? Насколько я понял разница между const char* и char const* нет, но что такое const *char? Насколько я понял(прочитал) это констатный указатель на строку, но как он используется, и корректен ли он вообще? ведь при компиляции вылезают аж 3 ошибки.
C++
1
2
3
4
5
6
7
8
9
10
11
12
char a, b;
const char* c = &a;
//*c = 'a'; //ошибка - указатель на константу
  c = &b;     //Ok
  
char * const d = &a;
//d = &b; //ошибка - константный указатель
 *d = 'a'; //Ok
 
const char* const e = &a;
//*e = 'a'; //ошибка - указатель на константу
//e = &b; //ошибка - константный указатель
Цитата Сообщение от h3mbr0 Посмотреть сообщение
8)Как заставить компилятор(visual studio) компилировать под 64 разрядную систему? ибо он всегда лепит под x32
в опциях проекта, если при установке студии поставили галку на установке компонентов для x64

Цитата Сообщение от h3mbr0 Посмотреть сообщение
9)И наконец как высвободить память(удалить) из под переменных, объектов, выделенных не в куче, т.е.
если
C++
1
myClass *mySuperClass
удаляется
C++
1
delete mySuperClass
myClass *mySuperClass удаляем delete только тогда когда выделяли память через new

Цитата Сообщение от h3mbr0 Посмотреть сообщение
то как удалить
C++
1
myClass mySuperClass
?
C++
1
2
3
{
    myClass mySuperClass;
} //выходим из области видимости и все созданные в блоке переменные "удаляются"
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
06.06.2012, 16:58     Как передать в функцию несколько аргументов, и другие глупые вопросы #5
Вот примерчик. Правда он не везде правильно работает.
Первый аргумент показывает сколько цифр надо просуммировать. Их количество может быть разным
Код
int my_summ(int n, ...);  // возвращает сумму чисел. Их количество равно n


int _tmain(int argc, _TCHAR* argv[])
{
	cout << my_summ(3, 1,2,3) << endl;


	system("pause");
	return 0;
}

int my_summ(int n, ...)
{
	int rez = 0;

	for (int i=1; i<=n; i++)
		rez += *(&n + i);

	return rez;
}
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
06.06.2012, 17:10     Как передать в функцию несколько аргументов, и другие глупые вопросы #6
c эллимсисами лучше не связыватся. но если уж приспичило, то для этого есть спец средства:
http://www.cplusplus.com/reference/c...darg/va_start/
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
06.06.2012, 17:16     Как передать в функцию несколько аргументов, и другие глупые вопросы #7
Можно вопрос? Вот эту ссылку дали http://cplusplus.com/ А есть ли такой сайт, но только на русском?
h3mbr0
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 125
06.06.2012, 22:55  [ТС]     Как передать в функцию несколько аргументов, и другие глупые вопросы #8
Цитата Сообщение от g-h Посмотреть сообщение
Можно вопрос? Вот эту ссылку дали http://cplusplus.com/ А есть ли такой сайт, но только на русском?
официального нет
А как насчет остальных моих вопросов?

Добавлено через 4 часа 5 минут
ап, еще один вопрос:
на что указывает this? по сути (по определнию) на текущий объект, но откуда ему известно какой объект текущий?
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
06.06.2012, 23:02     Как передать в функцию несколько аргументов, и другие глупые вопросы #9
Цитата Сообщение от h3mbr0 Посмотреть сообщение
по сути (по определнию) на текущий объект, но откуда ему известно какой объект текущий?
Он указывает на объект, для которого вызван метод. На котором именно объекте метод вызван, известно там, где и когда этот вызов происходит. Адрес этого объекта передаётся в метод как скрытый параметр и называется this.
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct Example {
    int a;
    void foo() {this->a = 0;}  // Можно было написать просто a = 0;
};
 
void bar(Example* This)
{
    This->a = 0;
}
 
int main()
{
    Example e;
    // Эти два вызова делают одно и то же, но в первом случае адрес e передаётся неявно через this
    e.foo();
    bar(&e);
}
h3mbr0
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 125
06.06.2012, 23:28  [ТС]     Как передать в функцию несколько аргументов, и другие глупые вопросы #10
А что начет 3, 4, 5, 7, и 9 вопроса?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
06.06.2012, 23:48     Как передать в функцию несколько аргументов, и другие глупые вопросы #11
Цитата Сообщение от h3mbr0 Посмотреть сообщение
4)Каким образом можно создать таск(таймер)? К примеру что бы через 15 секунд выполнилась некая функция myFunc, при том что программа продолжала работать, а не засыпала дожидаясь истечения 15 секунд.
это системно зависимая возможность, если в винде то гуглите SetTimer(/*...*/)
в стандарном С++ таймера нет (пока что)

Цитата Сообщение от h3mbr0 Посмотреть сообщение
3)Есть ли разница при инициализации:
C++
1
2
3
4
class myClass {
public:
static int count=0;
};
и
C++
1
myClass::count=0
1-й код скомпилируется только компилятором поддерживающим новый стандарт - С++11
2-й код скомпилируется соответсвует прежним стандартам, а потому скомпилируется на более старых компиляторах


9-й вопрос я уже ответил в 4-м посту, что неясно?

Добавлено через 5 минут
Цитата Сообщение от h3mbr0 Посмотреть сообщение
5)Какая разница при передачи например

C++
1
void myFunc(myClass &s)
и
C++
1
void myFunc(myClass *s)
путаюсь со ссылкоуказателеразыменовывателями
что конкретно неясно?

Добавлено через 4 минуты
Цитата Сообщение от h3mbr0 Посмотреть сообщение
7)Когда используются extern и static? Насколько я понял (опять же где то прочитал) например extern int i; объявляет что то вроде прототипа, позволяющего обращаться к этому самому i. А static создает локальную переменную, невидимую другим объектам, и перекрывающую другие глобальные объекты, и все же везде написано по разному, и я до конца так и не понял для чего и когда нужно использовать эти ключевые.. эти слова вообщем
переменная объявленная как extern в одной еденице трансляции(читай файле), может использоватся в другой еденице трансляции, но в плюсах не принято использовать extern ибо это гораздо все усложняет
переменная объявленная как static наоборот видна только в одной еденице трансляции
переменная объявленная как static внутри функции сохраняет свое значение после выхода из функции
переменная объявленная как static внутри класса/структуры является общей для класса/структуры т..\е. её значение будет одинаковым для все объектов структуры/класса
h3mbr0
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 125
07.06.2012, 12:46  [ТС]     Как передать в функцию несколько аргументов, и другие глупые вопросы #12
Благодарю за исчерпывающие ответы
что конкретно неясно?
Ну на мой взгляд в обоих случаях передается адрес, и я не вижу разницы между указателем и ссылкой...
И не понимаю для чего иногда в коде объявляют ссылки(не в качестве аргумента, а в качестве переменной) и зачем это нужно
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.06.2012, 12:57     Как передать в функцию несколько аргументов, и другие глупые вопросы #13
Цитата Сообщение от h3mbr0 Посмотреть сообщение
Ну на мой взгляд в обоих случаях передается адрес, и я не вижу разницы между указателем и ссылкой...
это верно, но разница в том что:
1) указателю можно присвоить другой адрес
2) вместо указателя можно передать параметром 0
с ссылками такое не прокатит, вот и вся разница
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2012, 13:06     Как передать в функцию несколько аргументов, и другие глупые вопросы
Еще ссылки по теме:

C++ Передача неизвестного количества аргументов в функцию, как реализовать?
Как правильно передать несколько данных в программу из функции? C++
C++ Как передать пути в качестве аргументов приложению?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
07.06.2012, 13:06     Как передать в функцию несколько аргументов, и другие глупые вопросы #14
Цитата из Стивен Дьюхерст. С++ Священные знания
Между ссылками и указателями существуют три основных различия: нулевых ссылок нет, все ссылки требуют инициализации и ссылка всегда установлена на объект, который ее инициализировал.
Yandex
Объявления
07.06.2012, 13:06     Как передать в функцию несколько аргументов, и другие глупые вопросы
Ответ Создать тему
Опции темы

Текущее время: 07:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru