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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2009, 17:30   #1
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
Восклицание Функция - член класса

Вот изучаю классы, и я так понял,можно описывать функции вне класса, достаточно знака ": :".
Вот решил написать, поэкспериментировать. Что-то не выходит. Всё это сделать, без использования конструктора.
Код:
#include <iostream>
using namespace std;

class fanta
{
public:
	int r1 = 5, r2 = 10;
	void k();
}
fanta::k()
{
	return r1+r2;
}

int main()
{
  fanta a;
  int b = a.k();
  cout<<b;
  cin.get();
}

Последний раз редактировалось Syltan; 06.10.2009 в 17:37.
Syltan вне форума Ответить с цитированием
Старый 06.10.2009, 17:39   #2
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

В классе ты объявляешь void k(), а в самой функции возвращаешь значение.

Последний раз редактировалось ds.Dante; 06.10.2009 в 17:51.
ds.Dante вне форума Ответить с цитированием
Старый 06.10.2009, 17:46   #3
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Плюс точки с запятой после объявления класса нет... и, когда выписываете ф-ция вне класса, то нужно указывать тип возвращаемого значения. И в пределах класса инициализированы могут быть только статические перменные
netrino вне форума Ответить с цитированием
Старый 06.10.2009, 17:49   #4
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

В общем, примерно так:
Код:
#include <iostream>
using namespace std;

class fanta
{
public:
	int r1, r2;
	int k();

	fanta()
	{
		r1 = 5;
		r2 = 10;
	}
};

int fanta::k()
{
	return r1+r2;
}

int main()
{
  fanta a;
  int b;
  b = a.k();
  cout<<b;
  cin.get();
}
ds.Dante вне форума Ответить с цитированием
Старый 06.10.2009, 17:52   #5
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию

Спасибо. А описывать так:
Код:
r1 = 5;
r2 = 10;
в самом классе, а затем пользоваться значенями в функции, тоесть
reurn r1+r2 оказывается нельзя?
Syltan вне форума Ответить с цитированием
Старый 06.10.2009, 17:54   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Можно, но только если это статические константы:
Код:

class fanta
{
public:
	static const int r1 = 5, r2 = 10;
	int k();
};
netrino вне форума Ответить с цитированием
Старый 06.10.2009, 17:59   #7
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию

А они что, не статические разве будут,если без этого static const? Я же не использую new...delete.,тогда они и так должны быть статическми.
Syltan вне форума Ответить с цитированием
Старый 06.10.2009, 18:06   #8
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

нет, потому что они будут создаваться новые для каждого экземпляра класса, не имеет значения в стеке или в куче. Между прочим, локальные переменные функции тоже динамические. Статическими по умолчания являются только переменные, расположенные вне функций и классов.
netrino вне форума Ответить с цитированием
Старый 06.10.2009, 21:52   #9
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию

Скажите, а вот это:
Код:
fanta()
	{
		r1 = 5;
		r2 = 10;
	}
равносильно этому?
Код:
fanta:r1(5), r2(10) { }

Последний раз редактировалось Syltan; 06.10.2009 в 22:26.
Syltan вне форума Ответить с цитированием
Старый 06.10.2009, 23:44   #10
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Syltan Посмотреть сообщение
Скажите, а вот это:
Код:
fanta()
	{
		r1 = 5;
		r2 = 10;
	}
Тут используется оператор присваивания.
Цитата:
Сообщение от Syltan Посмотреть сообщение
равносильно этому?
Код:
fanta:r1(5), r2(10) { }
Тут инициализируем значением сразу в конструкторе. В данном случае меньше телодвижений происходит. Для int разницы не будет практически никакой, а для "тяжелых" объектов она может быть достаточно существенной.
pu4koff вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатеть на функция-член класса BioS Общие вопросы C/C++ 6 29.09.2009 00:04
помогите написать функцию-член на Си++ aka_faith Помощь студентам 0 14.06.2009 17:36
Как изменить статический приватный член класса?? 3dgraph Помощь студентам 2 07.05.2009 20:06
Вычислить n-ый член по заданному n в массиве DiegO Паскаль, Turbo Pascal, PascalABC.NET 3 06.12.2008 20:58
одна функция потока, а другая функция - член класса запускающего этот поток Дмитрий_Ч Общие вопросы C/C++ 2 27.09.2007 08:50