c классы



Классы в си

Автор Алексей задал вопрос в разделе Другие языки и технологии

C++ Классы и получил лучший ответ

Ответ от ?????? Зелёный змий ??????[гуру]
Судя по вопросу, вы имеете плохое представление о классах.
Поля (они же - свойства класса, они же - переменные члены класса) - это пременные члены объекта класса. Чтобы пользоваться полями объекта класса нужет объект класса.
Методы (они же - функции-члены класса) - это функции-члены объекта класса. Чтобы ими пользоваться нужет объект класса. Иначе- никак.
class B { };
class A { B b; };
При такой организации совсем неразумно пытаться из класса b вызывать метод класса a. Потому что объект b не знает в состав какого класса от входит, и где этот объект, метод которого нужно вызывать.
Если очень нужно чтобы объект знал своего владельца, то нужно использовать указтель на объект, например так:
class A; // просто декларация типа
class B
{
public:
A *pParent; // указатель на объект-владелец объекта b
B(A *p) : pParent(p) {} // конструктор с параметром
void Method();
};
class A
{
public:
A():b(this) {} // конструктор с инициализацией объекта b
B b;
void Method();
};
void B::Method()
{
pParent->Method();
}
void A::Method()
{
// TODO:
}
А можно использовать вложенные классы, так лучше
class A
{
public:
class B
{
public:
void Method();
} b;
void Method();
};
void A::B::Method()
{
// извлекает смещение поля b относительно объекта A
size_t offset = (size_t)&reinterpret_cast<const char&>(((A*)0)->b);
// получаем указатель на объект-владелец
A *parent = reinterpret_cast<A*>(reinterpret_cast<char*>(this) - offset);
// вызываем метод объекта-владелеца
parent->Method();
}
void A::Method()
{
// TODO;
}

Ответ от Коровин Иван[гуру]
Сначала определить оба класса, потом уже определять методы

Ответ от Непростой Гусь[гуру]
пользоваться указателями на класс. Их можно использовать еще до определения класса.
Код не проверял!! !
// =============== Вариант 1 ===============
class A;
class A {
public:
int vA;
class B {
public:
void reset_vA ( A *pA ){ pA->setA(); }
} oB;
void set_vA() { A = 14; }
};
void main() {
A obA;
A.vA=7777;
A.oB.reset_vA(&obA);
}
// =============== Вариант 2 ===============
//Если первый не заработает
class A;
class A {
public:
int vA;
class B {
public:
void reset_vA ( A *pA );
} oB;
void set_vA() { A = 14; }
};
void B::reset_vA ( A *pA ) { pA->setA(); }
void main() {
A obA;
A.vA=7777;
A.oB.reset_vA(&obA);
}
//======================
Если ничего не заработает, отпишись на мыло, будет время - попробую разобраться. Хотя это изврат. Может с передачей в метод reset_vA указателя на функцию setA? Да, в мыле укажи название и версию среды разработки. Мало-ли

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: C++ Классы

Подскажите, как выглядит поездка из Бангкока в Сием Рип? сколько это по времени? есть ли замена транспорта на маршруте?
Самый быстрый и простой способ добраться из Бангкока в Сием Рип — полет на самолете. Но на
подробнее...
спросили в Static X
Что за ключевые слова extern и static в С++?
Вообще-то они еще в Си были.

extern - переменная где-то объявлена, но не в этой единице
подробнее...
спросили в 1774 год
сочинение на тему : судьба Гринёва (в повести Капитанская дочка)
Повесть А. С. Пушкина «Капитанская дочка» была опубликована в декабре 1836 года в журнале
подробнее...
спросили в Музыка
помогите по сольфеджио 7 класс билет №3
В этом билете только первое задание помогаю. дальше сам.... правила прислать? В Си бемоль мажоре
подробнее...

задача по физике за 7 класс,тема Механическое движение.Плотность вещества
все легко, просто нужно плотность урана (дана в спец. таблице плотностей) умножить на массу
в
подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:
спросили в 1647 год
История. 7 класс. Повод и основные события Освоения Сибири в 18 веке. Помогите!
В начале 18 века после тяжелой северной войны Россия получила выход в Балтийское море. Прорубив
подробнее...

В чём отличия c++ и java?
Java запускается на собственной java-машине, что делает её кросплатформенной. В java свой
подробнее...
спросили в 3 класс
задача за 3 класс
1) 7х2=14 взяли из второй корзины
2)7+14=21 взяли из обоих корзин
3)37-21=16 осталось в
подробнее...
спросили в Другое
стихи на 8 марта однокласницам (5 класс) искал ненашёл дайте пожалуйста стихи или ссылку хотябы
Да здравствуют девчонки!

Да здравствуют девчонки
С косичками и без!
Пусть
подробнее...

Помогите!спасите!Физика 8 класс.
А перевести в другие единицы измерения не
подробнее...

Список литературы за 10-11 класс кто нибудь помнит/знает?
А.Н.Островский. Гроза. Бесприданница
И.А.Гончаров. Обломов.
И.С.Тургенев. Отцы и дети.подробнее...
спросили в Другое
"Ваше Высокородие"-какому чину соответсвовало сие обращение?
Статский советник в России, гражданский чин 5-го класса по Табели о рангах, соответствовал
подробнее...

что такое сила?физика 7 класс
Сила — векторная физическая величина, являющаяся мерой интенсивности воздействия на данное тело
подробнее...
Класс программирование на Википедии
Посмотрите статью на википедии про Класс программирование
Метод программирование на Википедии
Посмотрите статью на википедии про Метод программирование
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*