Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Функции в качестве члена класса


Автор: Syltan 6.10.2009, 15:29
Вот изучаю классы, и я так понял,можно описывать функции вне класса, достаточно знака ": :".
Вот решил написать, поэкспериментировать. Что-то не выходит.
Код

#include <iostream>
using namespace std;

class fanta
{
public:
    int r1 = 15, r2 =20, rez;
    void k();
}
fanta::k()
{
    rez = r1 + r2;
}

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



Моя цель, должна получится вывестись сумма 2 чисел.

Автор: niXman 6.10.2009, 15:34
Syltan, А почему бы не прочитать вывод компилятора? smile 
Код

#include <iostream>
using namespace std;

class fanta
{
public:
    int r1 = 15, r2 =20, rez;
    void k();
}
void fanta::k()
{
    rez = r1 + r2;
}

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


Автор: kemiisto 6.10.2009, 15:37
Цитата(Syltan @  6.10.2009,  16:29 Найти цитируемый пост)
Вот изучаю классы

Изучай дальше. smile Код ужасен и демонстрирует полное непонимание.

Автор: mes 6.10.2009, 15:37
для начала имхо упростить код до такого:
Код

#include <iostream>

class fanta
{
  public:
      int sum (int, int);
};

int fanta::sum(int a, int b) { return a+b; }

int main {
fanta f;
std::cout << f.sum(15,20)<<std::endl;
std::cin.get();
}

потому как в исходном коде ошибки не только связанные с темой.

Автор: niXman 6.10.2009, 15:46
Цитата(mes @  6.10.2009,  13:37 Найти цитируемый пост)
потому как в исходном коде ошибки не только связанные с темой.

ах да smile 
Цитата(niXman @  6.10.2009,  13:34 Найти цитируемый пост)
int r1 = 15, r2 =20, rez;


Автор: Syltan 6.10.2009, 15:56
1)Что тема неправильна написана?
2)Я хочу использовать значения переменных 
Код

int r1 = 15, r2 =20;

Когда я создаю функцию член класса, тогда я могу пользоваться значениями из класса, тоесть
r1,r2.
3)Как мне сделать,чтоб значения задавать не здесь f.sum(15,20), а в классе.
Может вот так,ну что-то тоже не то:
Код


#include <iostream>
using namespace std;

class fanta
{
public:
    int r1 = 15, r2 =20, rez;
    void k();
}
fanta::k()
{
    return r1+r2;
}

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


Автор: niXman 6.10.2009, 16:29
Код

class fanta
{
public:
    fanta():r1(15),r2(20) {}
    int r1, r2, rez;
    void k();
}
fanta::k()
{
    return r1+r2;
}

Автор: Syltan 6.10.2009, 16:36
Так это с использованием конструкторов, а без использования конструкторов.
Просто я читаю книгу,там был пример без конструкторов. То есть смотрите,что я хочу.
Описать 2 переменные целого типа в классе, дать им значения. Создать функци-член класса, и
 воспользоваться этими значениями в описании самой функции. Затем,создать объект, через него получить доступ к функции, вызвав её, соответсвенно и получить после этого сумму 2 чисел.

Автор: niXman 6.10.2009, 16:39
Код

#include <iostream>
using namespace std;
class fanta
{
public:
    int r1, r2, rez;
    void k();
}
void fanta::k()
{
    return r1+r2;
}
int main()
{
  fanta a;
  a.r1 = 15;
  a.r2 = 20;
  int b = a.k();
  cout<<b;
  cin.get();
}


Добавлено через 1 минуту и 5 секунд
Про структуры и доспуп к членам почитай.

Автор: Syltan 6.10.2009, 16:43
Код

#include <iostream>
using namespace std;
class fanta
{
public:
    int r1, r2, rez;
    void k();
};

void fanta::k()
{
    return r1+r2;
}
int main()
{
  fanta a;
  a.r1 = 15;
  a.r2 = 20;
  int b = a.k();
  cout<<b;
  cin.get();
}



Выдаёт ошибку:
 error C2562: 'fanta::k' : 'void' function returning a value


Автор: ISergeyN 6.10.2009, 16:45
Глаза откройте
Код

#include <iostream>
using namespace std;
class fanta
{
public:
    int r1, r2, rez;
    //void k(); !
   int k();
}
//void fanta::k() !
int fanta::k()
{
    return r1+r2;
}
int main()
{
  fanta a;
  a.r1 = 15;
  a.r2 = 20;
  int b = a.k();
  cout<<b;
  cin.get();
}

Автор: Syltan 6.10.2009, 16:49
Всё, понял,спасибо всем. То есть, оказывается значения давать, только можно в главной функции main(), а не в классе?

Автор: niXman 6.10.2009, 16:57
Цитата(Syltan @  6.10.2009,  14:49 Найти цитируемый пост)
а не в классе?

И в классе тоже можно, но только через конструктор.

Добавлено через 6 минут и 48 секунд
Либо допиши seter-ы

Автор: Andrey44 7.10.2009, 06:52
Код

#include <iostream>
using namespace std;
class fanta
{
    int r1, r2, rez;
public:
   int k();
   void set_values(int val1, int val2){r1 = val1; r2 = val2;}
}
int fanta::k()
{
    return r1+r2;
}
int main()
{
  fanta a;
  a.set_values(15 ,20);
  int b = a.k();
  cout<<b;
  cin.get();
}

Цитата(Syltan @  6.10.2009,  16:45 Найти цитируемый пост)
a.r1 = 15;
  a.r2 = 20;
Очень некрасиво.

Автор: bsa 7.10.2009, 11:59
Цитата(Syltan @  6.10.2009,  16:36 Найти цитируемый пост)
Так это с использованием конструкторов, а без использования конструкторов.
Без использования конструктора никак, так как конструктор для того и нужен, чтобы инициализировать переменные класса
Цитата(Syltan @  6.10.2009,  16:36 Найти цитируемый пост)
Просто я читаю книгу,там был пример без конструкторов.
Может там были не переменные, а константы?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)