Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
thechicho
0 / 0 / 0
Регистрация: 15.03.2015
Сообщений: 15
Завершенные тесты: 1
#1

Перечислить все проблемы, которые вы видите в данном коде - C++

17.08.2016, 10:31. Просмотров 730. Ответов 27
Метки нет (Все метки)

Предложите ваши варианты решения заданий

1. Перечислите все проблемы, которые вы видите в данном коде:

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
class Foo
{
public:
    Foo(int j) { i=new int[j]; }
    ~Foo() { delete i; }
private:
    int* i;
};
 
class Bar: Foo
{
public:
    Bar(int j) { i=new char[j]; }
    ~Bar() { delete i; }
private:
    char* i;
};
 
 
void main()
{
    Foo* f=new Foo(100);
    Foo* b=new Bar(200);
    *f=*b;
    delete f;
    delete b;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2016, 10:31
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Перечислить все проблемы, которые вы видите в данном коде (C++):

Перечислить все слова заданного предложения, которые состоят из тех же букв что и первое - C++
Уважаемые знатоки кода! Помогите, пожалуйста, с программкой, по заданию: перечислить все слова заданного предложения, которые состоят...

В текстовом файле содержится некоторый текст. Выделить все числа, которые содержатся в данном тексте - C++
В текстовом файле содержится некоторый текст. Выделить все числа , которые содержатся в данном тексте. Заполнить другой файл этими числами....

Перечислить дни, на которые приходится пятница 13-го числа - C++
компилятор усиленно ругается на vector есть и другие мелкие ошибки.. не могу разобраться,объясните.. *Перечислить дни, на...

Перечислить слова, которые состоят из тех же букв - C++
Решите пожалуйста задачу: Перечислить все слова созданного предложения, которые состоят из тех же букв, что и первое слово предложения.

Используется ли в данном коде ООП? - C++
#include <iostream> #include <regex.h> using namespace std; #define PATTERN "^{0,3}.{0,3}.{0,3}.{0,3}$" #define STRING...

Что делает (->) в данном коде - C++
TInfo Info; TElem *Elem = new TElem; Elem->Info.Ball = Info.Ball; Не нашел информации в сети, что делает эта...

27
John Prick
831 / 764 / 154
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
17.08.2016, 13:16 #16
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
А тут базовому объекту присваивается базовая часть произв. объекта
Ну да, срезка. Но это всё имело бы смысл, только если наследование было бы открытое.
0
DrOffset
17.08.2016, 13:22
  #17

Не по теме:

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

0
Babysitter
134 / 117 / 36
Регистрация: 23.11.2015
Сообщений: 358
Завершенные тесты: 2
17.08.2016, 14:27 #18
Цитата Сообщение от John Prick Посмотреть сообщение
приватное наследование использовано намеренно или это типа "ошибка"?
ошибка, иначе вот это

Цитата Сообщение от thechicho Посмотреть сообщение
Foo* b=new Bar(200);
вообще смысла не имеет
0
hoggy
6813 / 3001 / 516
Регистрация: 15.11.2014
Сообщений: 6,795
Завершенные тесты: 1
17.08.2016, 19:07 #19
Цитата Сообщение от thechicho Посмотреть сообщение
C++
1
2
Foo(int j) { i=new int[j]; }
* * ~Foo() { delete i; }
new int[j];
delete i;


нарушение правила трех
(отсутствия конструкторов копии/перемещения/оператор=/перемещающий оператор=)

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

Добавлено через 51 секунду
Цитата Сообщение от thechicho Посмотреть сообщение
Foo(int j)
Цитата Сообщение от thechicho Посмотреть сообщение
Bar(int j)
у базового класса нет дефолтного конструктора

Добавлено через 41 секунду
Цитата Сообщение от thechicho Посмотреть сообщение
class Bar: Foo
Цитата Сообщение от thechicho Посмотреть сообщение
Foo* b=new Bar(200);
приведение существует.
но не доступно.
0
DrOffset
7517 / 4513 / 1024
Регистрация: 30.01.2014
Сообщений: 7,362
17.08.2016, 19:20 #20
Цитата Сообщение от hoggy Посмотреть сообщение
приведение существует.
но не доступно.
Кстати, недоступное приведение можно легально обойти, если использовать с-style cast.
5.4/4
... the conversion is valid even if the base class is inaccessible ...
1
thechicho
0 / 0 / 0
Регистрация: 15.03.2015
Сообщений: 15
Завершенные тесты: 1
17.08.2016, 19:42  [ТС] #21
Kastaneda, меня не взяли, т.к. я слишком слабо выполнил это тестовое задание. после этого я запостил здесь вопросы, чтобы понять, что я упустил. а не для того, чтобы использовать ваши ответы в качестве своих)
0
Ferrari F1
623 / 521 / 101
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
17.08.2016, 21:52 #22
thechicho, и на что из данного задания вы ответили?
0
Sretenkov
9 / 5 / 1
Регистрация: 15.08.2016
Сообщений: 48
17.08.2016, 22:02 #23
В классах выделяются участки памяти для массивов, освобождаются же для одиночных переменных.
Foo(int j) { i=new int[j]; }
~Foo() { delete i; }
0
Ferrari F1
623 / 521 / 101
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
17.08.2016, 22:07 #24
hoggy, можешь плес разъяснить про
Цитата Сообщение от hoggy Посмотреть сообщение
приведение существует.
но не доступно.
0
hoggy
6813 / 3001 / 516
Регистрация: 15.11.2014
Сообщений: 6,795
Завершенные тесты: 1
17.08.2016, 22:13 #25
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
можешь плес разъяснить про
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
class Foo
{
public:
    Foo(int j) { i=new int[j]; }
    ~Foo() { delete i; }
private:
    int* i;
};
 
class Bar: Foo
{
public:
    Bar(int j) { i=new char[j]; }
    ~Bar() { delete i; }
private:
    char* i;
};
 
void main()
{
    Foo* f=new Foo(100);
    Foo* b=new Bar(200);
    *f=*b;
    delete f;
    delete b;
}
Код
source_file.cpp: In constructor ‘Bar::Bar(int)’:
source_file.cpp:13:16: error: no matching function for call to ‘Foo::Foo()’
     Bar(int j) { i=new char[j]; }
                ^
source_file.cpp:13:16: note: candidates are:
source_file.cpp:4:5: note: Foo::Foo(int)
     Foo(int j) { i=new int[j]; }
     ^
source_file.cpp:4:5: note:   candidate expects 1 argument, 0 provided
source_file.cpp:1:7: note: constexpr Foo::Foo(const Foo&)
 class Foo
       ^
source_file.cpp:1:7: note:   candidate expects 1 argument, 0 provided
source_file.cpp: At global scope:
source_file.cpp:23:11: error: ‘::main’ must return ‘int’
 void main()
           ^
source_file.cpp: In function ‘int main()’:
source_file.cpp:26:23: error: ‘Foo’ is an inaccessible base of ‘Bar’
     Foo* b=new Bar(200);
                       ^
обратите внимание на самую последнюю ошибку:
поскольку наследование приватное,
то внешняя сторона не имеет право приводить наследника к базе.
C++
1
Foo* b=new Bar(200); // <--- приведение Bar к Foo запрещена при закрытом наследовании
0
ct0r
18.08.2016, 17:17
  #26

Не по теме:

А после выполнения этих заданий реально могут позвать на собеседование? У кого-то было такое? Я в яндекс собеседовался 3 раза (2 раза успешно), но ни разу их не делал))

0
Tulosba
18.08.2016, 18:26
  #27

Не по теме:

Цитата Сообщение от ct0r Посмотреть сообщение
Я в яндекс собеседовался 3 раза (2 раза успешно)
Пройти собеседование, чтобы потом послать их на *** ?

0
Voivoid
677 / 280 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
18.08.2016, 18:27 #28
Цитата Сообщение от ct0r Посмотреть сообщение
А после выполнения этих заданий реально могут позвать на собеседование? У кого-то было такое? Я в яндекс собеседовался 3 раза (2 раза успешно), но ни разу их не делал))
Могут. Я в яндекс.браузер именно таким образом попал в свое время.
0
18.08.2016, 18:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2016, 18:27
Привет! Вот еще темы с ответами:

Зачем переменная size в данном коде? - C++
Здравствуйте. Задание: Реализовать представление и основные операции для множеств. Помимо добавления, удаления, получения (и т.д.)...

Что означает pos ^= 1 в данном коде? - C++
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #define FILE_NAME &quot;numbers.txt&quot; int main(void) { int...

Какая альтернатива указателям в данном коде? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdlib.h&gt; using namespace std; void matrix(int **m, int r, int s) { ...

Перечислить все подмножества n элементного множества {1,2,.,n} - C++
Помогите пожалуйста написать программу для этой задачи: Перечислить все подмножества n элементного множества {1,2,...,n}


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru