Передача из конструктора в функцию 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 шт):
В общем случае массивы в функции передаются по указателю на начало или ссылке. Можно передавать копию массива, но это достаточно долгая операция, расходующая память.
Если речь идет о массиве, который является членом класса, то его никуда передавать не надо - функции-члены класса имеют к нему доступ. Во внешние функции массив можно передавать относительно объекта - 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();
}