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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с классами 
:(
    Опции темы
dandy77
Дата 25.5.2009, 12:57 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



У меня есть два класса:

class CBaseClass
{
public:
    CBaseClass();
    int x_1;
    int y_1
    SetValue(int x, int y) {x_1=x;y_1=y};
};

CBaseClass::CBaseClass()
{
x_1=10;
y_1=12;
}

class CDeliveryClass : public CBaseClass
{

}

void main(void)
{
CDeliveryClass m_Class;
m_Class.SetValue(20,14);
}

Причем  как видите я устанавливаю в программе:

m_Class.SetValue(20,14);

но эта установка не срабатывает- все равно в расчетах в базовом классе используються значения, установленные в конструкторе, то есть 10 и 12:

CBaseClass::CBaseClass()
{
x_1=10;
y_1=12;
}

Что мне делать. Мне именно надо что бы так были переменные и их инициализция размещена в классах. Как мне сделать что бы срабатывало:

m_Class.SetValue(20,14);

??????????????????
PM MAIL   Вверх
zim22
Дата 25.5.2009, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Код

class CBaseClass {
public:
  CBaseClass() : x_1(10), y_1(12) { }    
  void SetValue(int x, int y) {
    x_1 = x;
    y_1=y;
  }
private:
  int x_1;
  int y_1;
};

class CDeliveryClass : public CBaseClass { };

int main()
{
  CDeliveryClass m_Class;
  m_Class.SetValue(20,14);

    return 0;
}





--------------------
PM MAIL   Вверх
dandy77
Дата 25.5.2009, 13:44 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Дело в том что мне надо что бы конструктор:

class CBaseClass {
public:
  CBaseClass() : x_1(10), y_1(12) { }  

был не пустой так как еще много инициализируеться других переменных. Это я в общих чертах привел пример свой.
PM MAIL   Вверх
math64
Дата 25.5.2009, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Ты что-то упустил важное из своего кода. Приведённый тобой код, и код zim22 должны работать одинаково.
PM   Вверх
dandy77
Дата 25.5.2009, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот так будет точнее:

class CBaseClass
{
public:
    CBaseClass();
    SetValue(int x=10, int y=12) {x_1=x;y_1=y}

protected:
    int x_1;
    int y_1
   
};

CBaseClass::CBaseClass()
{
x_1=10;
y_1=12;
}

class CDeliveryClass : public CBaseClass
{

}

void main(void)
{
CDeliveryClass m_Class;
m_Class.SetValue(20,14);
}
PM MAIL   Вверх
Peter
Дата 25.5.2009, 14:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(dandy77 @  25.5.2009,  13:55 Найти цитируемый пост)
Вот так будет точнее

Что выше, что сейчас: синтаксические ошибки (на мой взгляд; компилятору я этот код не подсовывал).
После определения CDeliveryClass нет точки с запятой. Нет ее и после объявления переменной y_1.


--------------------
всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23).
PM MAIL WWW   Вверх
azesmcar
Дата 25.5.2009, 14:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(dandy77 @  25.5.2009,  13:55 Найти цитируемый пост)


CBaseClass::CBaseClass()
{
x_1=10;
y_1=12;
}

вместо инициализации используется присваивание. лишний вызов оператора присваивания..и что же конкретно тут лучше?

Это сообщение отредактировал(а) azesmcar - 25.5.2009, 14:06
PM   Вверх
math64
Дата 25.5.2009, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Это тоже ничего не меняет. Ты вызываешь m_Class.SetValue(20,14); а не m_Class.SetValue();
Может у тебя есть поля int x_1,  int y_1; в CDeliveryClass? Они не инициализируются в SetValue().
Или SetValue() переопределён в CDeliveryClass, а ты не вызываешь CBaseClass::SetValue()?
(пользуйся кнопкой Код для оформления своего кода)
PM   Вверх
mes
Дата 25.5.2009, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(dandy77 @  25.5.2009,  11:57 Найти цитируемый пост)
но эта установка не срабатывает- все равно в расчетах в базовом классе используються значения, установленные в конструкторе, то есть 10 и 12:

Сколько раз приводили код, а место в котором на Ваш взгляд поведение отличается от ожидаемого скрыли.
Где ж те расчеты, которые ведут себя неверно ?

P.S. и оформляйте, пожалуйста, код тегами. Поверьте, Вам это будет не трудно, а форумчанам не надо будет ломать глаза и у них будет больше сил и желания на помощь Вам  smile 


Это сообщение отредактировал(а) mes - 25.5.2009, 14:08


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


Шустрый
*


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

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



Спасибо за помощь ребята, я уже сделал, но еще не разобрался. Просто я на DirectX программирую, да еще пример взял из SDK. в SDK пример работает, а мой нет. функцию SetValue() с моими значениями я поместил в функцию рендеринга и все заработало. Теперь она вызываеться не один раз перед запуском приложения, а все время при каждой прорисовке. Почему я еще не знаю. А еще попробывал поместить SetValue() в конструктор CDeliveryClass тоже заработало.

Это сообщение отредактировал(а) dandy77 - 25.5.2009, 14:21
PM MAIL   Вверх
mes
Дата 25.5.2009, 14:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(dandy77 @  25.5.2009,  13:17 Найти цитируемый пост)
. Теперь она вызываеться не один раз перед запуском приложения, а все время при каждой прорисовке. Почему я еще не знаю.

потому что в main Вы устанавливаете  значения у другого Объекта, не тому, который используется при рендеринге. 
Для того чтоб разобраться, Вам необходимо понять разницу между классом/типом и объектом.




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


Новичок



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

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



Цитата(dandy77 @  25.5.2009,  13:55 Найти цитируемый пост)
    
Код

SetValue(int x=10, int y=12) {x_1=x;y_1=y}

Разве в заголовке функции не задаются параметры по умолчанию? Я могу ошибаться, но при  записи
Код

function(int a = 10)
{
x_1 = a;
}

переменной x_1 всегда будет присваиваться 10?
PM MAIL   Вверх
azesmcar
Дата 25.5.2009, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(Cybernetic10 @  25.5.2009,  15:12 Найти цитируемый пост)
Разве в заголовке функции не задаются параметры по умолчанию? 

да smile 

Цитата(Cybernetic10 @  25.5.2009,  15:12 Найти цитируемый пост)
переменной x_1 всегда будет присваиваться 10? 

нет smile 
только когда параметр функции не передали.
PM   Вверх
zim22
Дата 25.5.2009, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(Cybernetic10 @  25.5.2009,  15:12 Найти цитируемый пост)
Разве в заголовке функции не задаются параметры по умолчанию? Я могу ошибаться, но при  записи

будьте внимательны и отличайте заголовок(объявление) функции от его определения.
нижеприведенный код компилироваться не будет, т.к. значения по умолчанию не должны использоваться в определении функции класса
Код

struct C {
  void fcn(int a = 10);
};
void C::fcn(int a = 10) { }



--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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