Пузырьковая сортировка не работает для сортировки динамического массива объектов в C ++

Plamen Rozinov спросил: 14 ноября 2017 в 06:24 в: c++

У меня есть класс City со следующими личными данными: название города (тип char), ширина (double), длина (double) и высота (double) города. Я должен сделать динамический массив, который вставляется конструктором по умолчанию - City (), когда программы запускаются. Затем программа использует метод output () и печатает вставленный массив городов.mA - мой объект городов. Я должен использовать bubble сортировать, чтобы отсортировать города по их длине. У меня есть конструктор копирования, оператор =, и мне нужно преобразовать double max (это переменная, используется в пузырьковой сортировке для хранения текущего максимального значения) в тип City, и для этой цели я использовал contructor с одним параметр: City (double max). Проблема в том, что сортировка не работает. Я думаю, что проблема в моем определении конструктора с одним параметром (для преобразования типа double в тип city).

#include "stdafx.h"
#include<iostream>
#include<math.h>
#include <algorithm> 
using namespace std;class City{
private: char *name;
         double width;
         double length;
         double height;
public:    void Output();
    City();
    ~City();
    City(double max){
        name = "";
        width = 0;
        length = max;
        height = 0;
    }
    double GetLength()
    {
        return length;
    }
    double GetWidth(){ return width; }
    double GetHeight(){ return height; }
    char GetName(){ return *name; }
    City(const City& that)
    {
        name = new char[strlen(that.name) + 1];
        for (int i = 0; i <= strlen(that.name); i++)
            name[i] = that.name[i];
        //strcpy(name, that.name);
        width = that.width;
        length = that.length;
        height = that.height;
    }    City& operator=(const City that)
    {
        name = that.name;
        width = that.width;
        length = that.length;
        height = that.height;
        return*this;
    }
};
City::City()
{
    char ime[20];
    cout << "Name= ";
    cin >> ime;
    name = new char[strlen(ime) + 1];
    for (int i = 0; i <= strlen(ime); i++)
        name[i] = ime[i];    cout << "Width= ";
    cin >> width;
    cout << "Length= ";
    cin >> length;
    cout << "Height= ";
    cin >> height;
}void City::Output()
{
    cout << "Name is: " << name << endl;
    cout << " Width is: " << width << " deg" << endl;;
    cout << " Length is: " << length << " deg" << endl;
    cout << " Height is: " << height << " m" << endl;
    return;
}
City::~City()
{
    cout << " " << endl;
    cout << "Destructor of City!" << endl;
    delete[] name;}int main()
{    int n;
    City *mA;
    cout << "Input number of cities: " << endl;
    cin >> n;
    mA = new City[n];
    for (int j = 0; j < n; j++)
    {
        mA[j].Output();
    }
    cout << "Cities from west to east, sorted by their length" << endl;    double max = mA[0].GetLength();
    for (int j = 1; j<n; j++)
    {
        if (mA[j - 1].GetLength()>mA[j].GetLength())
        {
            max = mA[j - 1].GetLength();            mA[j - 1] = mA[j];
            mA[j] = max;
        }
    }
    for (int j = 0; j < n; j++)
    {
        mA[j].Output();
    }    delete[]mA;
    return 0;}

0 ответов