Форум программистов, компьютерный форум CyberForum.ru

Опишите безопасное ослабление правил для типов аргументов замещаемых функций - C++

Восстановить пароль Регистрация
 
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
23.04.2013, 12:03     Опишите безопасное ослабление правил для типов аргументов замещаемых функций #1
Здорова!
Есть еще задачка запутанная:

Предположим, что правила проверки типов для аргументов ослаблены аналогично правилам для типов возвращаемых значений с тем, чтобы можно было заместить функцию, имеющую аргумент типа Base*, на функцию с аргументом Derived*. Напишите программу которая может испортить объект типа Derived без использования приведения типов. Опишите безопасное ослабление правил для типов аргументов замещаемых функций.

Что здесь от нас требуется я вообще не пойму.

Добавлено через 12 минут
Ну что кто первый сделает? Задачка в принципе очень легкая тока, что вроде "ЭВРИКА" произошло, как бы ясно стало, что от на хотят. Примерно догадался.
Кто первый решить тому плюс к репутации сразу ставлю!

Добавлено через 13 минут
Лано вижу вы сильно долго думаете. Здесь я думаю просто имеется в веду, если б были такие правила. Тут как бы имеется в веду что указателю на производный класс можно присвоить указатель базового класса. От например утакой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//oclablenie pravil proverki
#include <iostream>
using std::cout;
using std::endl;
 
class Base
{
public:
    virtual void print(){cout <<"Base::print()"<<endl;}
    virtual Base* zam(){return this;}
};
class Derived : public Base 
{
public:
    virtual void print(){cout <<"Base::print()"<<endl;}
    virtual Base* zam(){return this;}
};
 
int main()
{
    Derived* D=new(Derived);
    Derived* Zam=new(Derived);
    D=Zam->zam();//тут ошибка конечно же (испорченная программа)
    
    return 0;
}
И просто дальше описать примерно правила по которым можно разрешить такое присваивание Dirived* = Base*
Я так думаю утето от нас хотят в задаче?

По крайней мере я ее так сделаю и не буду парится, если вы ничо не добавите.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2013, 12:03     Опишите безопасное ослабление правил для типов аргументов замещаемых функций
Посмотрите здесь:

Указатели, адресная арифметика и передача аргументов функций по значению и по ссылке C++
C++ Найти предельные значения для целочисленных типов. Не использовать заранее определенные константы границ типов.
Можно ли создать свой перегруженный вариант функций, для разных типов потока C++
C++ Шаблоны функций (определение наименьшего из двух аргументов)
Шаблоны функций (определение наименьшего из двух аргументов) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
23.04.2013, 12:04     Опишите безопасное ослабление правил для типов аргументов замещаемых функций #2
Цитата Сообщение от ninja2 Посмотреть сообщение
Предположим, что правила проверки типов для аргументов ослаблены аналогично правилам для типов возвращаемых значений
Где указаны ослабления для возвращаемых значений?
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
23.04.2013, 12:13  [ТС]     Опишите безопасное ослабление правил для типов аргументов замещаемых функций #3
Цитата Сообщение от ForEveR Посмотреть сообщение
Где указаны ослабления для возвращаемых значений?
Не где. Есть просто условие задачи и все. Если б было б еще, что то я б добавил. В книге мб перевод не правильный поэтому и условие конкретное не всегда может быть. Возможно нужно смысл попытаться понять.

Наверно ослабление это как бы мнимое просто предпологается что можно сделать на самом деле его нельзя сделать.

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

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

А мб я и не правильно думаю. Ну раз конкретных условий нету значит и решение такое не конкретное.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
23.04.2013, 12:14     Опишите безопасное ослабление правил для типов аргументов замещаемых функций #4
ninja2,
Предположим, что правила проверки типов для аргументов ослаблены аналогично правилам для типов возвращаемых значений
Ключевое слово здесь "аналогично". Если что-то аналогично чему-то, значит что-то должно быть указано, разве нет? Внимательнее читайте параграф книги. Или имеется ввиду некое стандартное ослабление для возвращаемых типов, по отношению к аргументам?
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
23.04.2013, 12:19  [ТС]     Опишите безопасное ослабление правил для типов аргументов замещаемых функций #5
Kuzia domovenok а ты что скажешь? Не ну меня твой ник веселит. Када вижу так сразу почемуто смешно становиться

Добавлено через 1 минуту
Цитата Сообщение от ForEveR Посмотреть сообщение
Ключевое слово здесь "аналогично". Если что-то аналогично чему-то, значит что-то должно быть указано, разве нет? Внимательнее читайте параграф книги. Или имеется ввиду некое стандартное ослабление для возвращаемых типов, по отношению к аргументам?
Ща просмотрю параграф но я думаю наврятли.

Добавлено через 1 минуту
Цитата Сообщение от ninja2 Посмотреть сообщение
чтобы можно было заместить функцию, имеющую аргумент типа Base*, на функцию с аргументом Derived*
От хотябы из этого условия задачи, если мы заместим функцию которая имеет Base* на Derived*, то это нарушит правила случайно программа может стать не рабоче.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
23.04.2013, 12:28     Опишите безопасное ослабление правил для типов аргументов замещаемых функций #6
ninja2, Собственно, о чем задача указывается в параграфе прямо перед заданиями. Там и указаны ослабления (речь идет о стандартных ослаблениях).
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
23.04.2013, 12:36  [ТС]     Опишите безопасное ослабление правил для типов аргументов замещаемых функций #7
Да от я внимательно условие задачи прочитал и просмотрел параграф.
Под замещение понимается замещение виртуальной функции в производном классе
то есть если б была функция в базовом классе Base* zam(Base*), то в производном мы ее б могли заменить на Derived* zam(Derived*). А такого послабления по моему не существует.
Это если взять утето условие:
Предположим, что правила проверки типов для аргументов ослаблены аналогично правилам для типов возвращаемых значений с тем, чтобы можно было заместить функцию, имеющую аргумент типа Base*, на функцию с аргументом Derived*
Значит получается теоретическая задачка. Просто так поразмышлять по теме

Добавлено через 4 минуты
Цитата Сообщение от ForEveR Посмотреть сообщение
Собственно, о чем задача указывается в параграфе прямо перед заданиями. Там и указаны ослабления (речь идет о стандартных ослаблениях).
Параграф называется "Иерархии классов" там есть замещение при множественном наследовании, таких правил нету.
Если б они были, то в условии прямо сказали не предположите а используйте ослабление. Предположим здесь ключевое слово.

Вообщем запутанные задачки. Не такие и простые.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
23.04.2013, 12:37     Опишите безопасное ослабление правил для типов аргументов замещаемых функций #8
ninja2, Примерно так, да.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
 
class A
{
public:
   virtual ~A() {}
   virtual A* clone() { return new A(*this); }
   virtual void print() { std::cout << "A" << std::endl; }
   virtual void release(A* ptr) { std::cout << "A::release" << std::endl; }
};
 
class B : public A
{
public:
   virtual B* clone() { return new B(*this); }
   virtual void print() { std::cout << "B" << std::endl; }
   virtual void release(B* ptr) { std::cout << "B::release" << std::endl; }
};
 
int main()
{
   A* p = new B();
   A* p2 = p->clone();
   p2->print();
   B b;
   p2->release(&b);
   delete p;
   delete p2;
}
В первом случае - с виртуальностью все ок.
Во втором случае - это две разные функции. release в производном классе не перегружает release базового.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2013, 12:49     Опишите безопасное ослабление правил для типов аргументов замещаемых функций
Еще ссылки по теме:

C++ Создание функций, с произвольным количеством аргументов
C++ Константные указатели в качестве аргументов функций
Использование указателей в качесве аргументов функций C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
23.04.2013, 12:49  [ТС]     Опишите безопасное ослабление правил для типов аргументов замещаемых функций #9
Цитата Сообщение от ForEveR Посмотреть сообщение
Примерно так, да.
Ну да видишь правила ж не ослабить никак
Yandex
Объявления
23.04.2013, 12:49     Опишите безопасное ослабление правил для типов аргументов замещаемых функций
Ответ Создать тему
Опции темы

Текущее время: 23:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru