Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
-80 / 27 / 1
Регистрация: 14.03.2015
Сообщений: 809

Создание и использование классов

14.08.2016, 17:17. Показов 678. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго все здравия, попытался сам написать класс, отрицательный результат ниже.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include <iostream>
using namespace std;
 
class test
{
    char hello[100];
    hello = "Hello world";
public:
    void look()
    {
        cout << hello << endl;
    }
 
}perviraz;
 
int _tmain(int argc, _TCHAR* argv[])
{
    perviraz.look();
 
    system("pause");
    return 0;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.08.2016, 17:17
Ответы с готовыми решениями:

Создание и использование классов
Здравствуйте програмисты. Помогите пожалуйста. В лабораторке есть задание: Организовать класс треугольник, определенный по длинам трех...

Создание и использование классов.Работа над ошибками
Задали сделать програмку. Вроде бы ничего сложного. Но выбивает ошибки( 1. Дано действительное число a и целое n. Вычислить сумму ...

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...

5
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
14.08.2016, 17:28
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <cstring>
using namespace std;
 
class test
{
    char hello[100];
public:
    test()
    {
        strcpy(hello,"Hello world");
    }
    void look()
    {
        cout << hello << endl;
    }
 
}perviraz;
 
int main()
{
    perviraz.look();
 
    system("pause");
    return 0;
}
0
-80 / 27 / 1
Регистрация: 14.03.2015
Сообщений: 809
14.08.2016, 17:37  [ТС]
zss, Объясните великодушно почему мой вариант не работает, Вы заполнили символьный массив через конструктор, это единственный вариант?
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
14.08.2016, 17:43
Для этого конструкторы и существуют, чтобы инициализировать данные класса.
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
14.08.2016, 17:45
gogaloh, во первых почему может ваш код, если вы компилируете в среде которая не поддерживает с++11, то нельзя инициализировать поля класса, потому что объект еще не создан, исключением являются статические константы, во вторых, даже если вы компилируете под с++11 у вас не правильный синтаксис можно написать так

C++
1
2
3
4
5
6
7
8
9
10
class test
{
    char hello[100] = "Hello world";
public:
    void look()
    {
        cout << hello << endl;
    }
 
}perviraz;
тогда при таком синтаксисе компилятор попробует сгенерировать конструктор по умолчанию которую попробует проинициализировать данную переменную, не уверен но с чаром могут вознукнуть проблеммы, так что лучше использовать
C++
1
std::string
1
 Аватар для meJevin
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
14.08.2016, 18:09
gogaloh, потому что запись типа
C++
1
2
char hello[100];
hello = "Hello world";
нелегальна в контексте членов класса (и не только). Я полагаю, ты хотел дать значение полю hello, но это делается не так.



Когда ты создаешь поле класса и хочешь его инициализировать, ты либо используешь in-class initialization, вот так:
C++
1
2
3
4
5
6
7
8
9
10
class test
{
    char hello[100] = "Hello world";
public:
    void look()
    {
        cout << hello << endl;
    }
 
}perviraz;
Заметь, что тут компилятор сам сделает дефолтный конструктор и инициализирует hello строковым литералом "Hello world"


Либо инициализируешь поля при создании объекта, т.е. в конструкторе, вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class test
{
    char hello[100];
 
public:
    test() : hello("Hello world") {}
 
    void look()
    {
        cout << hello << endl;
    }
 
}perviraz;
Тут прошу заметить, что member initializer list (двоеточие после параметров конструктора и переменные с их будущим значением в скобках) обязателен!

Ведь если бы я написал hello = "Hello world"; в теле конструктора (между фигурных скобок), то, мало того, что у меня ничего бы не вышло, потому что hello - const char* и должен быть инициализирован при создании, это бы была не инициализация, а присваивание нового значения.

Потому что программа сначала создает массив из 100 символов, причем каждый из них default-initialized (т.е. наполнен мусором или не инициализирован), а потом, когда ты пишешь hello = "Hello world";, старое значение hello убирается и новое значение присваивается. Таким образом на месте мусора у тебя встает "Hello world". Причем только на месте первых 12 (да 12, строковый литерал оканчивается null-terminator'om ('\0')) символов, остальные 88 символов остаются мусором.


Короче, ладно. Привел я два примера возможной инициализации твоего поля hello, использую один из них.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.08.2016, 18:09
Помогаю со студенческими работами здесь

Использование классов
Расскажите пожалуйста на кокретных примерах как и где модно использовать классы?

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

Использование классов
Класс Члены класса Методы Операторы перегрузки Исходные данные Матрица Размерность ...

Использование классов
Здравствуйте господа программисты. Помогите мне пожалуста. В Курсовой есть такое задание: &quot;Создать телефонную книгу&quot; ...

Использование классов
Составить программу для объявления и использования данных типа класс согласно индивидуальному заданию, Базовый (транспортное средство) ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
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, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru