Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2016, 21:27   #1
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию friend-функции и методы класса, помощь в лабе

Получилось скомпилировать без переменных. Подскажите правильно ли написал комментарии?

Код:
class my_Fun2; //объявляем о существовании второго класса

class my_Fun1
{
private:
	double x,y,h;
	friend void print (my_Fun1&); // объявление friend-функции
	friend void Run (my_Fun1&); // объявление friend-функции
public:
	my_Fun1 () //конструктор по умолчанию
	{
		x = 2.444;
		y = 0.00869;
	}
	void set(); //объявление метода 
	~my_Fun1() //Деструктор (не успеваю заметить его работу)
	{
		cout<<"Work destruct 1 "<<endl;
	}
};
class my_Fun2 //второй класс
{
private:
	double z;
	friend void print (); // объявление friend-функции (my_Fun2&  ?)
	friend void Run (); // объявление friend-функции
public:
	my_Fun2()
	{
		z = -130;
	}
	void set(); //объявление метода
	~my_Fun2() //Деструктор (не вижу его работы
	{
		cout<<"Work destruct 2 "<<endl;
	}
};
	void my_Fun1::set() //friend-функция ввода set 
	{
		cout<< "Enter x: ";
		cin>>x; // записываем x в класс my_Fun1
		cout<< "Enter y: ";
		cin>>y; // записываем y в класс my_Fun1
	}
	void my_Fun2::set()
	{
        cout<< "Enter z: ";
		cin>>z; // записываем z в класс my_Fun1
    }
	void Run (my_Fun1& obj_1,my_Fun2& obj_2)
	{
 /*	 double a,b,c;    //как записать внутри функции друга значения из классов пока не разобрался...
	 obj_1.x;
	 obj_1.y;
	 obj_2.z;
	 a = ((pow(x,y+1) + exp(y-1))/(1 + x*abs(y-tan(z))))*(1+abs(y-x));
	 b = pow(abs(y-x),2)/2;
	 c = pow(abs(y-x),3)/3;
	 obj_1.h = a+b-c;       */

	}

	void print (my_Fun1& obj_1) //печать ответа
	{
		cout<<"h = "<<obj_1.h<<endl; //берем h из my_Fun1 и записываем ответ после friend-функции Run
	}

 int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL, "rus");
	my_Fun1 a; //создаем класс a my_Fun1
	my_Fun2 *b; //создаем динамический класс b my_Fun2
	a.set();
	b->set();

    delete b;
	system("pause");
	return 0;
}
Помогите пожалуйста, скоро сессия, пытаюсь сам решать, необходимо вникнуть.

Последний раз редактировалось Dima-91; 05.12.2016 в 14:17.
Dima-91 вне форума Ответить с цитированием
Старый 05.12.2016, 14:14   #2
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию

Удалил первое сообщение заменил на новое, первый пост.

Последний раз редактировалось Dima-91; 05.12.2016 в 14:18.
Dima-91 вне форума Ответить с цитированием
Старый 05.12.2016, 14:20   #3
olej.tsil
Заблокирован
 
Регистрация: 29.11.2016
Сообщений: 215
По умолчанию

Цитата:
Сообщение от Dima-91 Посмотреть сообщение
Помогите пожалуйста, скоро сессия, пытаюсь сам решать, необходимо вникнуть.
Написанное - это ужас!
Читайте, читайте и читайте про friend функции. Эти функции не являются методами класса. Функции-методы класса получают 1-й неявный параметр this, friend функции такого параметра не получают, все её параметры должны быть выписаны явно.

Функции friend - это самые обычные функции, которым всего лишь разрешают доступ к protected членам класса.
olej.tsil вне форума Ответить с цитированием
Старый 05.12.2016, 15:19   #4
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию

Цитата:
Сообщение от olej.tsil Посмотреть сообщение
Написанное - это ужас!
Читайте, читайте и читайте про friend функции. Эти функции не являются методами класса. Функции-методы класса получают 1-й неявный параметр this, friend функции такого параметра не получают, все её параметры должны быть выписаны явно.

Функции friend - это самые обычные функции, которым всего лишь разрешают доступ к protected членам класса.
Прочитал с десяток статей, общего принципа толком не понял до сих пор.
Вот "накодил" скомпилировал вроде работает.
Код:
class my_Fun2;

class my_Fun1
{
private:
	double x,y,h;
	friend void print (my_Fun1&);
	friend void Run (my_Fun1&, my_Fun2&);
public:
	my_Fun1 ()
	{
		x = 2.444;
		y = 0.00869;
	}
	void set(void );
	void print1()
	{
	cout<<"x = "<<x<<endl;
	cout<<"y = "<<y<<endl;
	}
	~my_Fun1()
	{
		cout<<"Work destruct 1 "<<endl;
	}
};
class my_Fun2
{
private:
	double z;
public:
	friend void Run (my_Fun1&, my_Fun2&);
	my_Fun2()
	{
		z = -130;
	}
	void set(void);
	void print2 (void)
	{
		cout<<"z = "<<z<<endl;
    }
	~my_Fun2()
	{
		cout<<"Work destruct 2 "<<endl;
	}
};
	void my_Fun1::set(void)
	{
		cout<< "Enter x: ";
		cin>>x;
		cout<< "Enter y: ";
		cin>>y;
	}
	void my_Fun2::set(void)
	{
		cout<< "Enter z: ";
		cin>>z;
	}
	void Run (my_Fun1& obj_1,my_Fun2& obj_2)
	{
	 double a,b,c,x1,y1,z1;
	 x1 = obj_1.x;
	 y1 = obj_1.y;
	 z1 = obj_2.z;
	 a = ((pow(x1,y1+1) + exp(y1-1))/(1 + x1*abs(y1-tan(z1))))*(1+abs(y1-x1));
	 b = pow(abs(y1-x1),2)/2;
	 c = pow(abs(y1-x1),3)/3;
	 obj_1.h = a+b-c;
	}
	void print (my_Fun1& obj_1)
	{
		cout<<"h = "<<obj_1.h<<endl;
	}

 int _tmain(int argc, _TCHAR* argv[])
{
	double x,y,z;
	setlocale(LC_ALL, "rus");
	my_Fun1 a;
	my_Fun2 *b = new my_Fun2;
	a.set();
	b->set();
	a.print1();
	b->print2();
	Run(a, *b);
	print(a);
	delete b;
	system("pause");
	return 0;
}
Вопрос соответствует то что я сделал условию задачи?
Условие: Пользовательский класс Х должен содержать необходимые элементы – данные x, y, а класс Y – переменную z, которые создаются в динамической области памяти; конструкторы для их создания (операция new) и установки их начальных значений соответственно: Х(), Y(), деструкторы: ~ Х(), ~ Y(), friend–функция печати: friend void print(), функция, решающая поставленную задачу: friend void Run().
Код методов и функций – вне пространства определения класса.

Еще я оставил часть вспомогательных вещей, для того что б понимать то ли делается.
Dima-91 вне форума Ответить с цитированием
Старый 05.12.2016, 15:34   #5
olej.tsil
Заблокирован
 
Регистрация: 29.11.2016
Сообщений: 215
По умолчанию

Цитата:
Сообщение от Dima-91 Посмотреть сообщение
Вопрос соответствует то что я сделал условию задачи?
А это сессионная оценка покажет.
olej.tsil вне форума Ответить с цитированием
Старый 05.12.2016, 15:43   #6
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию

Цитата:
Сообщение от olej.tsil Посмотреть сообщение
А это сессионная оценка покажет.
На мой взгляд все хорошо сделано, чуток отредактировать и будет ровно под задание, 2 дружественные функции, метод для каждого класса вне тела. Все как просили))
Dima-91 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужна помощь в лабе С++ dtn1 Фриланс 3 02.08.2015 15:38
Реализация работы с классами, конструктор, методы класса и переменные класса / Java EE (J2EE) pashkevych Помощь студентам 60 21.08.2014 10:49
Виртуальные функции-операции и friend'ы megachuhancer Общие вопросы C/C++ 5 11.03.2011 15:38