Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
49 / 2 / 0
Регистрация: 26.09.2014
Сообщений: 98

Про инициализацию объекта в поле класса

26.12.2016, 10:38. Показов 737. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Извините за тупой вопрос. Но,почему нельзя инициализировать объект в поле класса?
у меня есть класс Sounds с параметризованным конструктором
C++
1
Sounds::Sounds(char*adress)
и допустим, я его хочу использовать в др. классе. А на запись
C++
1
2
3
4
5
6
7
8
class StandartPiano : public Strategy
{
    Sounds s("sounds/first octave/1.wav");
public:
    StandartPiano();
    ~StandartPiano();
 
};
ругается. Но ведь если там же объявить какой нибудь объект без параметров все норм будет. Получается, в полях класса, при его описании только можно объявлять переменные, но не инициализировать? запись Sounds s("sounds/first octave/1.wav"); это же инициализация, верно? как быть?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.12.2016, 10:38
Ответы с готовыми решениями:

Поле объекта класса Timage
Добрый день! Создаю свой класс, полем которого является картинка на форме. С помощью метода этого класса я могу изменять картинку. Но...

Вывод объекта класса в поле Memo
Добрый день! Хотелось бы реализовать вывод объектов класса в поле Memo, чтобы было как показано на прикрепленном скриншоте. void...

Объясните про инициализацию
Реализовал свой класс для строки (в качестве практики изучения c++) class TString { char* p; int size; public: ...

9
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
26.12.2016, 10:44
Всё верно, непосредственно инициализировать нельзя. Но можно через конструктор:
C++
1
2
3
4
5
6
7
class StandartPiano : public Strategy
{
    Sounds s;
public:
    StandartPiano() : s("sounds/first octave/1.wav") { ... }
    ~StandartPiano();
};
0
49 / 2 / 0
Регистрация: 26.09.2014
Сообщений: 98
26.12.2016, 10:56  [ТС]
Цитата Сообщение от likehood Посмотреть сообщение
StandartPiano() : s("sounds/first octave/1.wav") { ... }
это же всё равно, что
C++
1
2
3
4
StandartPiano::StandartPiano() 
{
s("sounds/first octave/1.wav")
}
?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
26.12.2016, 11:02
Цитата Сообщение от likehood Посмотреть сообщение
непосредственно инициализировать нельзя.
С++11 позволяет.
Maks53, среда какая?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.12.2016, 11:03
Цитата Сообщение от Maks53 Посмотреть сообщение
допустим, я его хочу использовать в др. классе
C++
1
2
3
4
5
6
7
class StandartPiano : public Strategy
{
    Sounds s = "sounds/first octave/1.wav";
public:
    StandartPiano();
    ~StandartPiano();
};
0
49 / 2 / 0
Регистрация: 26.09.2014
Сообщений: 98
26.12.2016, 11:15  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
среда какая?
vs 2015
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
26.12.2016, 11:18
Цитата Сообщение от Maks53 Посмотреть сообщение
vs 2015
Тогда или как hoggy показал, или так:
C++
1
Sounds s{"sounds/first octave/1.wav"};
1
49 / 2 / 0
Регистрация: 26.09.2014
Сообщений: 98
26.12.2016, 11:53  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Тогда или как hoggy показал, или так:
C++Выделить код
1
Sounds s{"sounds/first octave/1.wav"};
а если надо массив объектов инициализировать?
C++
1
2
3
4
5
6
7
8
9
10
class SoundsLib
{
    Sounds BigO[12], LowO[12], FirstO[12], SecO[12], ThirdO[12];
public:
    SoundsLib();
    ~SoundsLib();
 
private:
 
};
я сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SoundsLib::SoundsLib()
{
    Sounds BigO[12]{ "sounds/big octave/1.wav","sounds/big octave/1-2.wav","sounds/big octave/2.wav","sounds/big octave/2-3.wav","sounds/big octave/3.wav","sounds/big octave/4.wav",
        "sounds/big octave/4-5.wav","sounds/big octave/5.wav","sounds/big octave/5-6.wav","sounds/big octave/6.wav","sounds/big octave/6-7.wav","sounds/big octave/7.wav"
    };
    Sounds LowO[12]     {"sounds/low octave/1.wav","sounds/low octave/1-2.wav","sounds/low octave/2.wav","sounds/low octave/2-3.wav","sounds/low octave/3.wav",
    "sounds/low octave/4.wav","sounds/low octave/4-5.wav","sounds/low octave/5.wav","sounds/low octave/5-6.wav","sounds/low octave/6.wav","sounds/low octave/6-7.wav",
    "sounds/low octave/7.wav"
    };
    
    Sounds FirstO[12]{"sounds/first octave/1.wav","sounds/first octave/1-2.wav", "sounds/first octave/2.wav", "sounds/first octave/2-3.wav", "sounds/first octave/3.wav",
                         "sounds/first octave/4.wav","sounds/first octave/4-5.wav", "sounds/first octave/5.wav", "sounds/first octave/5-6.wav", "sounds/first octave/6.wav", "sounds/first octave/6-7.wav", 
                         "sounds/first octave/7.wav" 
                        };
    Sounds SecO[12]     {"sounds/second octave/1.wav","sounds/second octave/1-2.wav", "sounds/second octave/2.wav", "sounds/second octave/2-3.wav", "sounds/second octave/3.wav",
    "sounds/second octave/4.wav", "sounds/second octave/4-5.wav", "sounds/second octave/5.wav", "sounds/second octave/5-6.wav", "sounds/second octave/6.wav", "sounds/second octave/6-7.wav",
    "sounds/second octave/7.wav",
    };
    Sounds ThirdO[12]   {"sounds/third octave/1.wav","sounds/third octave/1-2.wav", "sounds/third octave/2.wav", "sounds/third octave/2-3.wav", "sounds/third octave/3.wav", "sounds/third octave/4.wav",
    "sounds/third octave/4-5.wav", "sounds/third octave/5.wav", "sounds/third octave/5-6.wav", "sounds/third octave/6.wav", "sounds/third octave/6-7.wav",
    "sounds/third octave/7.wav",
    };
}
но он говорит что не определен конструктор по умолчанию. добавил его и вроде ушли все красные подчеркивания. но я так подозреваю, это не будет правильно работать?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.12.2016, 14:56
Цитата Сообщение от Maks53 Посмотреть сообщение
но он говорит что не определен конструктор по умолчанию.
Можно сделать и вот так:
C++
1
2
3
4
5
6
7
8
9
struct A
{
    A(const int) {}
};
 
int main()
{
    A a[] = {A(1), A(2)};
}
0
19495 / 10100 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
26.12.2016, 14:58
Цитата Сообщение от Maks53 Посмотреть сообщение
это же всё равно, что
Нет, не все равно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.12.2016, 14:58
Помогаю со студенческими работами здесь

Вопрос про инициализацию
Всем привет. Народ подскажите, хочу сделать клиент-серверное приложение, как сделать чтобы в TForm сделать окошко и в этом окошке...

Про позднюю инициализацию std::thread
Я занимаюсь проигрыванием MIDI-файлов. В общем: есть мультимедиа-таймер, который каждую миллисекунду вызывает метод класса-проигрывателя,...

Скринсейвер, вопросы про первичную инициализацию параметров
Сразу скажу, objective-c я не знаю, но мне очень нужно сделать простенький скринсейвер. Сейчас он имеет такой код и работает: ...

Вызвать процедуру\функцию из другого объекта\класса. Из одного класса\объекта сделать два
Здравствуйте. Подскажите что не правильно делаю, и возможно ли вообще - вызвать процедуру\функцию из другого объекта\класса, в турбо...

Куда вставить инициализацию объекта, что бы доступ был из других методов?
Добрый день :) Куда вставить инициализацию объекта, что бы доступ был из других методов? Вот массив объектов: Res...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru