М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
sashazen03
sashazen03
18.10.2020 21:46 •  Информатика

C++ От :

(1)
Создайте два класса описывающие эти геометрические объекты: Point и Vector. При этом Point(0.0, 1.0, 2.0) будет точкой в координатном пространстве x = 0.0, y = 1.0 и z = 2.0. А Vector(1.0, 0.0, 0.0) будет вектором, представляющим направление только вдоль положительной оси x длиной 1.0.

Вектор может применятся к точке для перемещения точки на новую позицию. Это делается путем добавления направления вектора к позиции точки. Например, Point(0.0, 1.0, 2.0) + Vector(0.0, 2.0, 0.0) даст точку Point(0.0, 3.0, 2.0). Создайте для этой операции функцию movePointByVector(). Сделайте это всеми из перечисленных :

a) объявите функцию movePointByVector() отдельно от классов Point и Vector, объекты этих классов предаются как параметры в эту функцию, в результате функция возвращает новый объект класса Point;

b) объявите класс Point дружественным классу Vector и реализуйте метод movePointByVector () в классе Point;

c) объявите метод Point:: movePointByVector () дружественным классу Vector;

d) объявите класс Vector дружественным классу Point и реализуйте метод movePointByVector () в классе Vector;

e) объявите метод Vector:: movePointByVector () дружественным классу Point
(2)
Доработайте программу из 1 задания, заменив функционал метода movePointByVector() перегрузкой операторов сложения и вычитания для соответствующих операндов. Кроме того, перегрузите оператор [] для получения значений координат x, y, z по соответствующему индексу 0,1,2 и символу “x”, “y”, “z”, и операторы ввода и вывода.

👇
Ответ:
jernova
jernova
18.10.2020

Дружественные функции - это функции, которые не являются членами класса, однако имеют доступ к его закрытым членам - переменным и функциям, которые имеют спецификатор private.

Для определения дружественных функций используется ключевое слово friend. Например, определим следующую программу:

#include <iostream>

#include <string>  

 

class Auto

{

   friend void drive(Auto &);

   friend void setPrice(Auto &, int price);

public:

   Auto(std::string autoName, int autoPrice)  

   {  

       name = autoName;  

       price = autoPrice;

   }

   std::string getName(){ return name; }

   int getPrice() { return price; }

 

private:

   std::string name;   // название автомобиля

   int price;  // цена автомобиля

};

 

void drive(Auto &a)  

{  

   std::cout << a.name << " is driven" << std::endl;

}

void setPrice(Auto &a, int price)

{

   if (price > 0)  

       a.price = price;

}

 

int main()

{

   Auto tesla("Tesla", 5000);

   drive(tesla);

   std::cout << tesla.getName() << " : " << tesla.getPrice() << std::endl;

   setPrice(tesla, 8000);

   std::cout << tesla.getName() << " : " << tesla.getPrice() << std::endl;

 

   return 0;

}

Здесь определен класс Auto, который представляет автомобиль. У этого класса определены приватные закрытые переменные name (название автомобиля) и price (цена автомобиля). Также в классе объявлены две дружественные функции: drive (функция вождения автомобиля) и setPrice (функция назначения цены). Обе этих функции принимают в качестве параметра ссылку на объект Auto.

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

При этом для дружественных функций не важно, определяются они под спецификатором public или private. Для них это не имеет значения.

Определение этих функций производится вне класса. И поскольку эти функции являются дружественными, то внутри этих функций мы можем через переданную ссылку Auto обратиться ко всем его закрытым переменным.

Консольный вывод программы:

Tesla is driven

Tesla : 5000

Tesla : 8000

Определение дружественных функций в классе

Дружественные функции могут определяться в другом классе. Например, определим класс Person, который использует объект Auto:

#include <iostream>

#include <string>  

 

class Auto;

 

class Person

{

public:

   Person(std::string n)

   {

       name = n;

   }

   void drive(Auto &a);

   void setPrice(Auto &a, int price);

 

private:

   std::string name;

};

 

class Auto

{

   friend void Person::drive(Auto &);

   friend void Person::setPrice(Auto &, int price);

public:

   Auto(std::string autoName, int autoPrice)

   {

       name = autoName;

       price = autoPrice;

   }

   std::string getName() { return name; }

   int getPrice() { return price; }

 

Объяснение:

1 void drive(Auto &a);

2 void setPrice(Auto &a, int price);

То есть фигурально говоря, человек водит автомобиль и назначает ему цену с этих функциий.

Класс Auto определяет дружественные функции с той же сигнатурой:

1 friend void Person::drive(Auto &);

2 friend void Person::setPrice(Auto &, int price);

Причем поскольку данные функции будут определены в классе Person, то названия этих функций предваряется префиксом "Person::".

И поскольку в этих функциях предполагается использовать объект Auto, то ко времени определения этих функций все члены объекта Auto должны быть известны, поэтому определения функций находятся не в самом классе Person, а после класса Auto. И так как эти функции определены в классе Auto как дружественные, мы можем обратиться в этих функциях к закрытым членам класса Auto.

Консольный вывод программы:

Tom drives Tesla

Tesla : 8000

Дружественные классы

В случае выше класс Person использует только две функции из класса Auto. Но допустим впоследствии возникла необходимость добавить в класс Auto еще ряд дружественных функций, которые будут определены в классе Person. Либо мы можем предполагать, что класс Person будет активно использовать объекты Auto. И в этом случае целесообразно определять не отдельные дружественные функции, а определить дружественным весь класс Person:

4,4(88 оценок)
Открыть все ответы
Ответ:
Anna14124
Anna14124
18.10.2020
#include "math.h"#include "iostream"
using namespace std;
int main(){int a, n, max, min;int max_i, max_k, min_i, min_k;//ввод размера массиваcin>>a;cin>>n;
//объявление массиваint** a = new int* [a]; for(int i = 0; i < n; i++) { a[i] = new int [a]; }
//ввод первого массива for(int i = 0; i < a; i++) { for(int k = 0; k < n; k++) { cin>>a[i][k]; } } //Инициализация max, min; max=a[0][0]; min=a[0][0]; //поиск максимума for(int i = 0; i < a; i++) { for(int k = 0; k < n; k++) { if(max<a[i][k]) { max=a[i][k]; max_i=i; max_k=k; } } } //поиск минимума for(int i = 0; i < a; i++) { for(int k = 0; k < n; k++) { if(min>a[i][k]) { min=a[i][k]; min_i=i; min_k=k; } } }
//Max and Min меняются местамиswap(a[max_i][max_k],a[min_i][min_k]);getch();return 0;}
4,6(6 оценок)
Ответ:
Cat4ik
Cat4ik
18.10.2020
//Вот программа, которая кодирует слова в системах счисления от 2 до 10
//Первый ввод - число, второй - система счисления
//Pascal ABC.NET v3.0

var
 a,i,b,r,n,j,bug:integer;
 s,se,slo,slof:string;

procedure preob(var a,b,n:integer; var se:string);
 begin
  repeat
   b:=a mod n;
   a:=a div n;
   str(b,se);
   s+=se;
  until (a<=n-1);
 end;

begin
readln(slo);
readln(n);
for j:=1 to length(slo) do
begin;
a:=ord(slo[j]);
preob(a,b,n,se);
str(a,se);
s+=se;
for i:=1 to length(s) div 2 do
begin;
se:=s[i];
s[i]:=s[length(s)-i+1];
s[length(s)-i+1]:=se[1];
end;
write(s,'-');
slof:=slof+s;
delete(s,1,length(s));
end;
end.

//Слово Программа она кодирует как 11001111-11110000-11101110-11100011-11110000-11100000-11101100-11101100-11100000-
4,7(55 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ