Пожалуйста, помогите питонисту с C++!
Приветствую!
Upd: был сонный, вот и забыл написать, что изучаю плюсы по вышке
Вот как описан класс в задании
Марка - char*
Мощность - int
Цена - float
В задании указано написать функцию ввода данных в объект с клавиатуры, затем создать объект с помощью конструктора по умолчанию и ввести данные в объект с помощью клавиатуры.
В общем, ввод работает, но либо программа завершается, либо не меняются параметры объекта
Юзаю Microsoft Visual C++
Уже просил в сети помощи, вот что ответили
... вы создаете временный объект Car с помощью вызова конструктора, после выхода из Input этот объект сразу уничтожается
Так как мне получить объект с введёнными с клавиатуры параметрами и вывести ЕГО параметры на экран?
Ах да, класс автомобиль с параметрами Марка, цена, мощь
#include <iostream>
#include <string.h>
#include <stdlib.h>
using namespace std;
class Car {
private:
char* marka;
int power;
float price;
public:
Car(char* m = "Renault", int pw = 150, float p = 1255000.0){
marka = m;
power = pw;
price = p;
};
public:
void Print(){
cout << "Mark is " << marka << ", price equals " << price << ", power is " << power << endl;
};
void Input();
};
void Car::Input(){
char *mark;
//Car new_;
mark = new char;
//new_ = new Car;
int pw;
float price;
cout << "Power of automobile: " << endl;
cin >> power;
cout << "Price of automobile: " << endl;
cin >> price;
cout << "Mark of automobile: " << endl;
cin >> marka;
Car output(marka,power,price);
};
int main() {
Car default_;
Car ipnut;
Car example("Toyota",145,1205000.0);
example.Print();
default_.Print();
ipnut.Input();
ipnut.Print();
return 0;
}
Поиграем в бизнесменов?
Одна вакансия, два кандидата. Сможете выбрать лучшего? И так пять раз.
С++ и муки проникновения
Всем известно, что дехканину доступны три пути: вебкам, закладки и айти.
Давненько подумывал о том, чтобы сбросить задницу с дивана и попробовать последний вариант, но все как-то было недосуг.
Интереса ради, решил хотя бы составить хотя бы первичное приблизительное представление о таком всем известном монстре, как С++, и для начала рискнул перевести на него имеющийся мини-проект пазлов, реализованный в старом добром Дельфи.
Выбрал естественно эмбаркадеровскую IDE, благо она процентов на 99 идентична их же дельфийской. Соответственно оказалось достаточно просто скопировать форму со всей мешаниной контролов на ней, и вставить в новый проект, не прибегая к утомительному растаскиванию кнопок и других компонентов.
Неделя страданий и вуаля:
Имею два идентичных ехешника разного размера, скачать которые можно по ссылкам:
С++ вариант:
https://mega.nz/file/ZEEzGLJQ#3htC3RMzhlbw0-xS9DZ0SwtyqPOhXV...
Delphi:
https://mega.nz/file/RVl1wKQI#frhBOl5nGsrT_dVGbPYM3e7dOg4rMp...
Каких-то особых отличий в эффективности и скорости и не заметил. По-моему вариант на Delphi более стабилен и работает чуть быстрее. С другой стороны С++ вариант весит меньше, но не критично.
Осталось еще попробовать зафигачить алгоритм на Яве, чтобы сделать браузерный вариант игры.
Сам перевод с одного языка не оказался прям уж сложным, но в паре мест, пришлось даже обратиться за помощью к старшим товарищам, которые сходу стали предлагать многокилометровые варианты решений.
Ну и собственно немного размышлений на тему.
Первое впечатление - C++ это неудобный и отвратительный язык, непонятно зачем существующий. Он не является достаточно низкоуровневым, и при этом неудобен для конечного пользователя.
При переводе с обычного Паскаля на си, возникло множество явных трудностей, начиная с невозможности напрямую обращаться ко многим используемым в библиотеках объектах, и заканчивая идиотским компилятором (ну это скорее вопросы к Эмбаркадеро), который запросто пропускает недостачу знака "=" в результате чего алгоритм начинает работать просто непредсказуемым образом.
Что выбесило:
Опять же, невозможность использовать многие нужные классы и методы напрямую, только через указатели, причем опытные сиплюсплюисты рекомендовали использовать умные указатели, из-за которых код начинает превращаться в какой-то маловразумительный гипертекст
Отсутствие динамических массивов - не, ну так-то по факту они есть, но объявляются опосредованно, по типу:
int a[lenght]; где lenght требуемая длина из переменной, но по факту это все то же самое статическое объявление в процедуре, поскольку не зная конкретно значение, объявить массив глобальным, доступным для других процедур не получится. Для Дельфи - это вообще не проблема. Можно объявлять когда угодно и где угодно.
Исключение векторы - но с ними опять же заметно усложняются самые простые вещи.
Массив, тем более многомерный, вообще является одним из основных элементов любого языка, поскольку на практике приходится их часто использовать в самых разных задачах.
Такое отношение к нему считаю недопустимым.
Далее циклы:
Тот же for по сути является все тем же while, для которого просто вынесена в заголовок операция изменения условия (счетчика цикла).
Цикл от нуля до десяти:
for (i==0;i<=10;++i) {}
это все то же самое
while (i<=10) с заранее заданным значением i, у которого операция со счетчиком осуществляется внутри тела.
Отвратительное сравнение ==. Я потратил почти целый день, не понимая почему программа вдруг стала вести себя непредсказуемым образом. Оказалось, пропустил одно "=" в условии.
Смешение типов. То, что является вполне себе реализуемым в других языках, здесь превращается в пляски с бубном.
Если разделить целое i на вещественное j, есть шанс получить округленное значение (в моем случае до нуля). Приходится сначала приводить целое к вещественному типу, а только потом уже делить его.
Отвратительный синтаксис. Как же осточертело вместо точек рисовать стрелочки. Тем более, что для некоторых объектов нужно все-таки использовать точки. Это невозможно понять, это нужно запомнить. Вообще в этом языке отсутствует логика. Если в Дельфи ты точно знаешь, как работать с методами, то тут возможны варианты - в некоторых случаях так, в других этак, в третьих вообще никак, ну или через дядю Васю из соседней деревни.
А еще повсюду указатели, указатели на указатели, указатели указателей, разыменование указателей с указанием разыменованного указателя, указание разыменования с указанием указателя на указатель и так до бесконечности...
Короче, С++, давай до свидания. Чувствую не выйдет из меня айтишника. Уже подумываю о покупке вебки.