| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Проблема с классами |
| Автор: dandy77 25.5.2009, 12:57 |
| У меня есть два класса: 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); ?????????????????? |
| Автор: zim22 25.5.2009, 13:15 | ||
|
| Автор: dandy77 25.5.2009, 13:44 |
| Дело в том что мне надо что бы конструктор: class CBaseClass { public: CBaseClass() : x_1(10), y_1(12) { } был не пустой так как еще много инициализируеться других переменных. Это я в общих чертах привел пример свой. |
| Автор: math64 25.5.2009, 13:49 |
| Ты что-то упустил важное из своего кода. Приведённый тобой код, и код zim22 должны работать одинаково. |
| Автор: dandy77 25.5.2009, 13:55 |
| Вот так будет точнее: 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); } |
| Автор: Peter 25.5.2009, 14:01 |
Что выше, что сейчас: синтаксические ошибки (на мой взгляд; компилятору я этот код не подсовывал). После определения CDeliveryClass нет точки с запятой. Нет ее и после объявления переменной y_1. |
| Автор: azesmcar 25.5.2009, 14:03 |
вместо инициализации используется присваивание. лишний вызов оператора присваивания..и что же конкретно тут лучше? |
| Автор: math64 25.5.2009, 14:05 |
| Это тоже ничего не меняет. Ты вызываешь m_Class.SetValue(20,14); а не m_Class.SetValue(); Может у тебя есть поля int x_1, int y_1; в CDeliveryClass? Они не инициализируются в SetValue(). Или SetValue() переопределён в CDeliveryClass, а ты не вызываешь CBaseClass::SetValue()? (пользуйся кнопкой Код для оформления своего кода) |
| Автор: dandy77 25.5.2009, 14:17 |
| Спасибо за помощь ребята, я уже сделал, но еще не разобрался. Просто я на DirectX программирую, да еще пример взял из SDK. в SDK пример работает, а мой нет. функцию SetValue() с моими значениями я поместил в функцию рендеринга и все заработало. Теперь она вызываеться не один раз перед запуском приложения, а все время при каждой прорисовке. Почему я еще не знаю. А еще попробывал поместить SetValue() в конструктор CDeliveryClass тоже заработало. |
| Автор: mes 25.5.2009, 14:38 | ||
потому что в main Вы устанавливаете значения у другого Объекта, не тому, который используется при рендеринге. Для того чтоб разобраться, Вам необходимо понять разницу между классом/типом и объектом. |
| Автор: Cybernetic10 25.5.2009, 15:12 | ||
Разве в заголовке функции не задаются параметры по умолчанию? Я могу ошибаться, но при записи
переменной x_1 всегда будет присваиваться 10? |
| Автор: azesmcar 25.5.2009, 15:16 | ||
да нет только когда параметр функции не передали. |
| Автор: zim22 25.5.2009, 15:21 | ||||
будьте внимательны и отличайте заголовок(объявление) функции от его определения. нижеприведенный код компилироваться не будет, т.к. значения по умолчанию не должны использоваться в определении функции класса
|