Передача из конструктора в функцию char массива

Так, у меня есть код , он должен сортировать строку в соответствии с алфавитом, но мне нужно его реализовать через разные виды конструкторов. Как передать из конструктора в туже функцию char массив( если это вообще можно сделать) , и как сделать аналогичные действия со string.

#include <iostream>
#include <stdlib.h> 
#include <cstring>
#include <string>

using namespace std;
class word
{
public:

    word() { //1
        char arr[] = "asffhcvv";
        word::sort();
        print();

    }
    
    word(string n) { // 2
        sort();
        print();

    }

   /* word(string n,int m) {
        string d;
        for (int i = 0; i < m; i++)
        {
            d += n[i];
        }
        print();
    }*/


    char arr[100] = " ";




    void input()
    {

        cout << " 555 - ";
        cin >> arr;

    }

    void sort()
    {
        int min, num;
        for (int i = 0; i < 100; i++)
        {
            min = 0;
            
            for (int j = 0; j < 100 - i; j++)
            {
                
                if (arr[j] > min)
                {
                    min = arr[j];
                    num = j;
                }
            }
            min = arr[100 - i - 1];
            arr[100 - i - 1] = arr[num];
            arr[num] = min;
        }
    }
    void print()
    {
        for (int i = 0; i < 100; i++)
            cout << arr[i];
        cout << endl;
    }

};
int main()
{
    word w;
    word w1("dsggsggsh");
   // word w2("b", 10);
    w.input();
    w.sort();
    w.print();
}

Ответы (1 шт):

Автор решения: DmitryK

В общем случае массивы в функции передаются по указателю на начало или ссылке. Можно передавать копию массива, но это достаточно долгая операция, расходующая память.
Если речь идет о массиве, который является членом класса, то его никуда передавать не надо - функции-члены класса имеют к нему доступ. Во внешние функции массив можно передавать относительно объекта - w.arr, т.к. массив декларирован в секции public:.
Т.к. массив в классе объявлен статически, move-семантика не применима.
Возможные конструкторы:

class word
{
  public:
   char arr[100];

   word(){} // конструктор по умолчанию, нужно как-то заполнить существующий массив
   word(const char* s) {} // конструктор копирования, нужно скопировать данные из `s` в `arr` 
   word(int n, char с = ' ') {} // заполнить массив n символами с, по умолчанию пробел
   word(string& s) {}// скопировать данные из строки s в массив arr
   word(int n, string& s) {} // скопировать первые n символов из строки s в массив arr
   word(word& w) {} // скопировать в массив данные из массива объекта w
   word(int n, word& w) {} // скопировать первые n символов из массива объекта w
}

Ваш конструктор по умолчанию написан неправильно. В нем создается и инициируется локальный массив, а не член класса.

word() 
{
   char arr[] = "asffhcvv"; // создается локальный массив
   sort(); // а сортируется массив из объекта класса
   print(); // и печатается массив из объекта класса 
}
// Должно быть как-то так
word() : arr("asffhcvv") // инициализация массива строкой
{
   sort(); 
   print();
}
// или так
word() 
{
   strcpy( arr, "asffhcvv"); // копирование данных из строки в массив
   sort(); 
   print();
}
→ Ссылка