Как использовать поля класса в другом классе
Перейти к содержимому

Как использовать поля класса в другом классе

  • автор:

Использование классов внутри других классов

Бывает такое, что мы хотели бы использовать методы одного класса внутри другого, но не хотели бы наследовать от этого класса.

Почему мы не хотим наследовать?

Во-первых, используемый класс может являться вспомогательным и по логике нашего кода может не подходить на роль родителя.

Во-вторых, мы можем захотеть использовать несколько классов внутри другого класса, а с наследованием это не получится, ведь в PHP у класса может быть только один родитель.

Давайте посмотрим на практическом примере. Пусть у нас дан следующий класс Arr , в объект которого мы можем добавлять числа с помощью метода add :

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

Пусть у нас уже существует класс SumHelper , имеющий методы для нахождения сумм элементов массивов:

Логично будет не реализовывать нужные нам методы еще раз в классе Arr , а воспользоваться методами класса SumHelper внутри класса Arr .

Для этого в классе Arr внутри конструктора создадим объект класса SumHelper и запишем его в свойство sumHelper :

Теперь внутри Arr доступно свойство $this->sumHelper , в котором хранится объект класса SumHelper с его публичными методами и свойствами (если бы публичные свойства были, сейчас их там нет, только публичные методы).

Создадим теперь в классе Arr метод getSum23 , который будет находить сумму квадратов элементов и прибавлять к ней сумму кубов элементов, используя методы класса SumHelper :

sumHelper = new SumHelper; > // Находим сумму квадратов и кубов элементов массива: public function getSum23() < // Для краткости запишем $this->nums в переменную: $nums = $this->nums; // Найдем описанную сумму: return $this->sumHelper->getSum2($nums) + $this->sumHelper->getSum3($nums); > public function add($number) < $this->nums[] = $number; > > ?>

Давайте воспользуемся созданным классом Arr :

add(1); // добавляем в массив число 1 $arr->add(2); // добавляем в массив число 2 $arr->add(3); // добавляем в массив число 3 // Находим сумму квадратов и кубов: echo $arr->getSum23(); ?>

Самостоятельно повторите описанные мною классы Arr и SumHelper .

Создайте класс AvgHelper с методом getAvg , который параметром будет принимать массив и возвращать среднее арифметическое этого массива (сумма элементов делить на количество).

Добавьте в класс AvgHelper еще и метод getMeanSquare , который параметром будет принимать массив и возвращать среднее квадратичное этого массива (квадратный корень, извлеченный из суммы квадратов элементов, деленной на количество).

Добавьте в класс Arr метод getAvgMeanSum , который будет находить сумму среднего арифметического и среднего квадратичного из массива $this->nums .

Использовать поля одного класса в другом классе

Author24 — интернет-сервис помощи студентам

Есть класс Parking() с созданным объектом currentParking1 и интовым полем currentParking1.parkingSpace = 1;
Есть класс Car() с созданным объектом car1 и интовым полем car1.currentCar = 4;
Вопрос: не используя листы\массивы, есть ли возможность использовать поле одного объекта в качестве нумерации другого, что-то вроде
car|currentParking1.parkingSpace|.currentCar = 4;
где currentParking1.parkingSpace заменяется его значением (1) и превращается в car1.currentCar = 4;
Может, что-то вроде вымышленного StringConvert.ToObject($»car.currentCar») уже существует в природе?

Здесь вы можете заказать любую студенческую или школьную работу.

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

Ответы с готовыми решениями:

Как использовать объект класса, созданого в определеном классе, в другом классе
У меня такой вопрос,как использовать объект класса,созданого в определеном классе,в другом классе.У.

Использовать переменную события в другом методе одного класса
Есть метод где я подписываюсь на событие private bool IsCameraRestarted(string ip, int port) .

Считать данные с одного класса и использовать их в другом классе
У меня есть два класса в программе — 1. Window Form со всеми контролс и переменными и 2.

Как использовать поля класса в другом классе

Всем привет.
Не могу понять, как правильно реализовать использование объекта одного класса в другом классе.

class primer1< private: int i; public: primer1(int i) i=i;>; void set(int i) i=i;>; int get() ; >; class primer2< private: primer1 a; свои поля; public: свои методы; >; int main()< primer2 b; Тут мне необходимо обратится к методу set класса primer1. Т.е. в объекте b(класс primer2) хочу изменить значение его поля a(класс primer1). Как это правильно сделать в соответсвии всем правилам ООП? Представляю себе это так. Для решения задачи мне надо получить доступ к полю primer1 a; Вариант1) Сделать в классе primer2 метод primer1& geta() ;. Тогда будет в main типа b.geta().get(); b.geta().set(i); Вариант2) Вынести поле primer1 a; в public. Тогда всё и так понятно. Вариант3) Сделать в классе методы "дубли" типа int get() ; void set(int i) ;. return 0; >

Подскажите как это правильно делается.
Software Engineer
Участник клуба
Регистрация: 07.04.2007
Сообщений: 1,618

Вы не сможете к нему обратиться, т.к. переменная primer1 a объявлена с модификатором доступа private.
Можно сделать так:

class A < public: void Func(); . >; class B < public: A a; . >; int main()

А, извиняюсь, не дочитал вопрос.
Выбор из ваших трех вариантов зависит от конкретной задачи, от того, какие сущности представляют классы и вообще от общей структуры проекта. Так, в общем виде, трудно сказать. Но вообще, если вы помещаете объект в закрытый доступ, то и работать с ним должен только тот класс, в котором он объявлен, иначе он должен быть в открытом доступе

Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария

Последний раз редактировалось Blade; 06.05.2011 в 11:25 .

Как использовать метод класса в другом классе python?

Для этого нужно указать этот класс в качестве родителя по отношению к текущему классу. Например, если в нашем классе MyClass мы хотим использовать метод method класса Parent :

class MyClass(Parent): # наследуем от класса Parent pass MyClass.method # # метод method родительского класса доступен для использования 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *