Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Наследование. Как передать переменную? 
:(
    Опции темы
Karisha
  Дата 24.10.2008, 03:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 22.10.2008

Репутация: нет
Всего: нет



Привет всем! У меня снова вопрос!

Задали такую задачку.

Есть 1 главный класс и 3 наследуемых.

Код

class A {
public:
    int id;
    void funcA();
};
 
class B : public A {
public:
    void funcB();
};

class C : public A {
public:
    void funcC();
};

class D : public A {
public:
    void funcD();
};

Как из функций:
  • void funcB()
  • void funcС()
  • void funcD()
получить значение переменной id?
PM MAIL   Вверх
J0ker
Дата 24.10.2008, 03:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



id


--------------------
user posted image
PM MAIL   Вверх
Karisha
Дата 24.10.2008, 03:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 22.10.2008

Репутация: нет
Всего: нет



не получается, выдает случайное 9 значное число

Это сообщение отредактировал(а) Karisha - 24.10.2008, 03:23
PM MAIL   Вверх
mes
Дата 24.10.2008, 03:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Karisha @  24.10.2008,  03:19 Найти цитируемый пост)
не получается, выдает случайное 9 значное число

так ты ее не инициализируешь, поэтому переменная хранит муссор.

А вообше переменную надо спрятать в private: , и добавить функцию int GetID () const { return id; }
которую поместить в public: если нужна всем или в protected: если никто кроме наследников не должен знать этот номер.



--------------------
PM MAIL WWW   Вверх
J0ker
Дата 24.10.2008, 05:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



Цитата(Karisha @  24.10.2008,  03:19 Найти цитируемый пост)
не получается, выдает случайное 9 значное число

это два противоположных утверждения


--------------------
user posted image
PM MAIL   Вверх
bsa
Дата 24.10.2008, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Код
class A
{
public:
    A() : id_(0) {} //конструктор инициализирует переменную id_
    void funcA();
    int id() const { return id_; }
    void setId(int value) { id_ = value; }
private:
    int id_;
};


Это сообщение отредактировал(а) bsa - 24.10.2008, 11:13
PM   Вверх
Karisha
Дата 24.10.2008, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 22.10.2008

Репутация: нет
Всего: нет



Ничего не поняла из Вашего примера smile 

Код

class A {
public:
    int id;
    void funcA();
};
 
class B : public A {
public:
    void funcB();
};
class C : public A {
public:
    void funcC();
};
class D : public A {
public:
    void funcD();
};
void A::funcA() {
   // как тут присвоить id ноль?
}
void B::funcB() {
    // как тут вывести id а потом увеличить его на единицу?
}
void С::funcС() {
    // как тут вывести id а потом увеличить его на единицу?
}
void D::funcD() {
    // как тут вывести id а потом увеличить его на единицу?
}


Я извиняюсь, но для меня c++ как тайская грамота =/

Это сообщение отредактировал(а) Karisha - 24.10.2008, 18:19
PM MAIL   Вверх
J0ker
Дата 24.10.2008, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



Код

#include <iostream>
using namespace std;

class A {
public:
    int id;
    void funcA();
};
 
class B : public A {
public:
    void funcB();
};
class C : public A {
public:
    void funcC();
};
class D : public A {
public:
    void funcD();
};
void A::funcA() {
   // как тут присвоить id ноль?
   id = 0;
}
void B::funcB() {
    // как тут вывести id а потом увеличить его на единицу?
    cout << id++ << endl;
}
void С::funcС() {
    // как тут вывести id а потом увеличить его на единицу?
    cout << id++ << endl;
}
void D::funcD() {
    // как тут вывести id а потом увеличить его на единицу?
    cout << id++ << endl;
}


Это сообщение отредактировал(а) J0ker - 24.10.2008, 18:58


--------------------
user posted image
PM MAIL   Вверх
Karisha
Дата 24.10.2008, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 22.10.2008

Репутация: нет
Всего: нет



Все равно выводит случайные числа

Код

karisha@computer:~/develop/cc$ g++ a.cpp
karisha@computer:~/develop/cc$ ./a.out
4197184
375155416
375155432
karisha@computer:~/develop/cc$ 

Код

#include <iostream>
using namespace std;
class A {
public:
    int id;
    void funcA();
};
 
class B : public A {
public:
    void funcB();
};

class C : public A {
public:
    void funcC();
};

class D : public A {
public:
    void funcD();
};

void A::funcA() {
   // как тут присвоить id ноль?
   id = 0;
}
void B::funcB() {
    // как тут вывести id а потом увеличить его на единицу?
    cout << id++ << endl;

void C::funcC() {
    // как тут вывести id а потом увеличить его на единицу?
    cout << id++ << endl;
}
void D::funcD() {
    // как тут вывести id а потом увеличить его на единицу?
    cout << id++ << endl;
}

int main() {
    A myA;
    B myB;
    C myC;
    D myD;
    myA.funcA();
    myB.funcB();
    myC.funcC();
    myD.funcD();
    return 0;
}


Это сообщение отредактировал(а) Karisha - 24.10.2008, 19:26
PM MAIL   Вверх
J0ker
Дата 24.10.2008, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



Цитата(Karisha @  24.10.2008,  19:21 Найти цитируемый пост)
Все равно выводит случайные числа

какие в переменной такие и выводит
собственно я не въезжаю чего вам надо
поставленная задача выполнена


--------------------
user posted image
PM MAIL   Вверх
mes
Дата 24.10.2008, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Karisha @  24.10.2008,  19:21 Найти цитируемый пост)
Все равно выводит случайные числа


Цитата(Karisha @  24.10.2008,  19:21 Найти цитируемый пост)
    A myA;
    B myB;
    C myC;
    D myD;
    myA.funcA();
    myB.funcB();
    myC.funcC();
    myD.funcD();


обратите внимание что у Вас  четыре разных объекта myA, myB, myC, myD. У каждого из них свои переменные, и действия над ними не пересекаются. Конечно можно объявить переменнуую обшей для всех объектов определенной иерархии, но название переменной (id ) говорит, что она должна быть у каждого объекта своя. 

Цитата(Karisha @  24.10.2008,  18:18 Найти цитируемый пост)

Я извиняюсь, но для меня c++ как тайская грамота =/

Ну тогда Вы  к вопросу не с того боку подошли. Что у Вас за задание ?

Это сообщение отредактировал(а) mes - 24.10.2008, 20:05


--------------------
PM MAIL WWW   Вверх
Karisha
Дата 24.10.2008, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 22.10.2008

Репутация: нет
Всего: нет



Мне нужно в Классе А,  присвоить переменной id - ноль.
В классе B увеличить значение переменной на единицу, и вывести его (т.е. присвоить id - 1)
В классе С увеличить значение переменной на единицу, и вывести его (т.е. присвоить id - 2)
В классе D увеличить значение переменной на единицу, и вывести его (т.е. присвоить id - 3)
PM MAIL   Вверх
mes
Дата 24.10.2008, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Karisha @  24.10.2008,  20:00 Найти цитируемый пост)
Мне нужно в Классе А,  присвоить переменной id - ноль.
В классе B увеличить значение переменной на единицу, и вывести его (т.е. присвоить id - 1)
В классе С увеличить значение переменной на единицу, и вывести его (т.е. присвоить id - 2)
В классе D увеличить значение переменной на единицу, и вывести его (т.е. присвоить id - 3) 

Это задание надуманое , так как у класса нет переменных(статические тоже под описание не подходят). Вы что то перепутали.

Добавлено через 3 минуты и 54 секунды
Цитата(Karisha @  24.10.2008,  19:21 Найти цитируемый пост)
   A myA;
    myA.funcA();


обратите внимание на то что класс называется A, а работаете вы с myA - который является объектом класса А. 



--------------------
PM MAIL WWW   Вверх
J0ker
Дата 24.10.2008, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



вынесите id из класса
Код

#include <iostream>
using namespace std;

int id;

class A {
public:
    void funcA();
};

class B : public A {
public:
    void funcB();
};
class C : public A {
public:
    void funcC();
};
class D : public A {
public:
    void funcD();
};
void A::funcA() {
   // как тут присвоить id ноль?
   id = 0;
}
void B::funcB() {
    // как тут вывести id а потом увеличить его на единицу?
    cout << id++ << endl;

void C::funcC() {
    // как тут вывести id а потом увеличить его на единицу?
    cout << id++ << endl;
}
void D::funcD() {
    // как тут вывести id а потом увеличить его на единицу?
    cout << id++ << endl;
}
int main() {
    A myA;
    B myB;
    C myC;
    D myD;
    myA.funcA();
    myB.funcB();
    myC.funcC();
    myD.funcD();
    return 0;
}

либо объявите ее внутри класса как static:
Код

#include <iostream>
using namespace std;
class A {
public:
    static int id;
    void funcA();
};

int A::id;
 
class B : public A {
public:
    void funcB();
};
class C : public A {
public:
    void funcC();
};
class D : public A {
public:
    void funcD();
};
void A::funcA() {
   // как тут присвоить id ноль?
   id = 0;
}
void B::funcB() {
    // как тут вывести id а потом увеличить его на единицу?
    cout << id++ << endl;

void C::funcC() {
    // как тут вывести id а потом увеличить его на единицу?
    cout << id++ << endl;
}
void D::funcD() {
    // как тут вывести id а потом увеличить его на единицу?
    cout << id++ << endl;
}
int main() {
    A myA;
    B myB;
    C myC;
    D myD;
    myA.funcA();
    myB.funcB();
    myC.funcC();
    myD.funcD();
    return 0;
}


Добавлено через 3 минуты и 7 секунд
Цитата(Karisha @  24.10.2008,  20:00 Найти цитируемый пост)
Мне нужно в Классе А,  присвоить переменной id - ноль.
В классе B увеличить значение переменной на единицу, и вывести его (т.е. присвоить id - 1)
В классе С увеличить значение переменной на единицу, и вывести его (т.е. присвоить id - 2)
В классе D увеличить значение переменной на единицу, и вывести его (т.е. присвоить id - 3) 



Цитата(Karisha @  24.10.2008,  19:21 Найти цитируемый пост)
// как тут вывести id а потом увеличить его на единицу?
// как тут вывести id а потом увеличить его на единицу?
// как тут вывести id а потом увеличить его на единицу?


вы уж определитесь


--------------------
user posted image
PM MAIL   Вверх
Karisha
Дата 24.10.2008, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 22.10.2008

Репутация: нет
Всего: нет



mes,J0ker , спасибо огромное за помощь, всё заработало!

Это сообщение отредактировал(а) Karisha - 24.10.2008, 20:14
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0660 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.