Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Ieroglif
18 / 18 / 1
Регистрация: 23.06.2011
Сообщений: 237
#1

Класс || первый опыт - C++

22.04.2012, 02:01. Просмотров 523. Ответов 9
Метки нет (Все метки)

Привет всем не спящим в этот поздний(ранний) час!

Как можно увидеть из заголовка, я пытаюсь освоить классы. Написал простенький код:
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
27
28
29
30
31
#include "stdafx.h"
#include <iostream>
using namespace std;
 
class f_class{
int x, y;
public:
    f_class(int x=0, int y=0);
    ~f_class();
    void show(int x, int y);};
 
    f_class::f_class (int x, int y)
    {
        coot<<"Enter x: ";
        cin>>f_class::x;
        cout<<"Enter y: ";
        cin>>f_class::y;
 
    }
    void f_class::show(int x, int y){
        cout<<"x: "<<f_class::x<<endl;
        cout<<"y: "<<f_class::y<<endl; 
    }
 
int main(){
    f_class l();
    //l.f_class();
    //l.show();
    system("pause");
return 0; 
}
А теперь вопрос: а как мне с этим классом работать? Как "запустить" конструктор, ф-ию печати х и у,
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2012, 02:01     Класс || первый опыт
Посмотрите здесь:

Не могу найти ошибку, первый опыт в С++. - C++
первый опыт в С++, и то неудачный( Никак не могу заставить работать программку( То не запускается, то вылетает сразу( // Lab1.cpp:...

Первый опыт с DirectX9. Странное поведение программы - C++
Решил начать осваивать DirectX. Взял код из этого урока, где рисуется треугольник ...

Самый первый опыт С++. На экран выводит не то, что ввёл. - C++
Ввожу одно. Выводит всегда -12-14-16. Откуда он ваще берет эти числа ума не приложу. Подскажите плизКод выкладываем в виде текста.

Первый класс. Функция-член - C++
Добрый день! Пытаюсь собрать свой первый класс, но, кажется, не до конца понимаю всей сути. #include &lt;stdio.h&gt; #include &lt;iostream&gt; ...

Описать класс, содержащий длину строки и указатель на его первый символ - C++
Описать класс, содержащий длину строки и указатель на его первый символ. Определить для класса необходимые конструктор (ы), деструктор, а...

Класс: преобразовать целочисленный массив, прибавив к нечетным числам первый элемент - C++
Преобразовать целочисленный массив, прибавив к нечетным числам первый элемент. Через класс

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
22.04.2012, 02:07     Класс || первый опыт #2
чтото вроде

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
#include <iostream>
using namespace std;
 
class f_class{
int x, y;
public:
    f_class (int x = 0 , int y = 0)
    {   
        cout<<"Enter x: ";
        cin>>f_class::x;
        cout<<"Enter y: ";
        cin>>f_class::y;
 
    }
    void show(){
        cout<<"x: "<<f_class::x<<endl;
        cout<<"y: "<<f_class::y<<endl; 
    }
};
 
int main(){
    f_class l;
    l.show();
}
Ieroglif
18 / 18 / 1
Регистрация: 23.06.2011
Сообщений: 237
22.04.2012, 02:15  [ТС]     Класс || первый опыт #3
Пардон, поспешил с сообщение - невнимателен был.

То есть не всегда необходимо в аргументах функций указывать используемые переменные? В моём случае - оттого, что была указана область видимости?
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
22.04.2012, 02:18     Класс || первый опыт #4
что значит не работает?
http://codepad.org/bx7S62aK

Добавлено через 1 минуту
Цитата Сообщение от Ieroglif Посмотреть сообщение
f_class l();
это объявление функции l, которая не принимает аргументов и возвращает объект типа f_class
pobedinsky
70 / 70 / 3
Регистрация: 21.12.2011
Сообщений: 188
22.04.2012, 02:19     Класс || первый опыт #5
C++
1
2
f_class l;
    l.show();
Создается объект l класса f_class. Далее для него вызывается метод show. Приведите текст ошибки.
Ieroglif
18 / 18 / 1
Регистрация: 23.06.2011
Сообщений: 237
22.04.2012, 02:38  [ТС]     Класс || первый опыт #6
Так, а деструктор?
C++
1
~f_class(){delete x; delete y;}
delete работать отказывается. Альтернативы?

Добавлено через 56 секунд
pobedinsky, а проблема эта уже решена, сейчас вопрос о деструкторе - его описании.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
22.04.2012, 02:42     Класс || первый опыт #7
Цитата Сообщение от Ieroglif Посмотреть сообщение
То есть не всегда необходимо в аргументах функций указывать используемые переменные? В моём случае - оттого, что была указана область видимости?
нет, не нужно.
под функциями ты имел в виду очевидно функции-члены класса, так называемые методы.
они получают информацию о данных, содержащихся в объекте для которого вызваны неявно, через указатель this.
то есть когда ты вызываешь такой метод
C++
1
void f_class::show(){cout<<x<<y;}
компилятор неявно преобразует его в нечто похожее на
C++
1
void show(f_class* this){cout<<(this->x)<<(this->y);}
Но подобное преобразование не твоя забота, а компилятора. Поэтому ты спокойно можешь вызывать в программе
C++
1
l.show();
и будь уверен, он выведет именно те x и y, которые хранятся в объекте l

Добавлено через 57 секунд
Цитата Сообщение от Ieroglif Посмотреть сообщение
Так, а деструктор?
забудь пока о деструкторе. Ты бежишь впереди паровоза, по-моему. Ты где нашёл такой пример деструктора? И даже если не говорить о деструкторах, где ты нашёл такое использование оператора delete?
Забудь! delete удаляет только память, выделенную new и не более
Ieroglif
18 / 18 / 1
Регистрация: 23.06.2011
Сообщений: 237
22.04.2012, 02:44  [ТС]     Класс || первый опыт #8
Почему забыть?

Всё же хочется иметь представление как работать с ним.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
22.04.2012, 02:55     Класс || первый опыт #9
Цитата Сообщение от Ieroglif Посмотреть сообщение
Всё же хочется иметь представление как работать с ним.
ну во-первых, деструктор в подавляющем большинстве случаев вызывается неявно. Не уверен, но помоему редкое исключение этому использование placement new, ведь так, знающие люди? Но это, действительно редкое исключение, особенно для новичков, как мы.

Короче, ты уясни, что деструктор вызывается сам, неявно, всякий раз, когда время жизни локальной или глобальной переменной заканчивается. Тебе его вызывать не нужно.

Второе- оператор delete используется в только паре с оператором new и только для выделенной им памяти. при освобождении таким способом памяти из под объекта класса, опять же неявно вызывается его деструктор. Применяется естественно к указателям, а не переменным. Ты же не пишешь в простых программах delete для каждой переменной???
C++
1
2
3
4
int main(){
int a=0;
delete a;//ты же так не делаешь??? Это ошибка!!!
}
Третье, если не работаешь с динамической памятью, или какими ещё подобными ресурсами, оставляй деструктор по умолчанию.
Ну и виртуальный деструктор изучи, когда будешь изучать наследование и виртуальные функции, но пока не беги вперёд паровоза.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2012, 04:27     Класс || первый опыт
Еще ссылки по теме:

задании первый класс вводиться по порядку а уже втором классе некоторый ввод перескакивает через одну - C++
# include &quot;stdafx.h&quot; # include &lt;conio.h&gt; #include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;windows.h&gt; #include &lt;tchar.h&gt; using...

Релизация очереди (первый пришел первый ушел) в классе - C++
Вот пытаюсь исправить ошибку в методе Рор(). Помоготе розобратся в чем проблема // Stack1.h #pragma once #include &lt;iostream&gt; ...

Очередь «первый вошел — первый вышел» (FIFO) - C++
Очередь — это устройство для хранения данных, похожее на стек. Отли-чие в том, что в стеке последний сохраненный элемент будет первым...

Опыт в разработке ПО - C++
Приветствую всех! Нужен опыт создания серьезных проектов... Скелет или даже логика разработки проекта (реализации проекта, а не ТЗ, ТУ...


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

Или воспользуйтесь поиском по форуму:
MrGluck
Модератор
Эксперт CЭксперт С++
7163 / 4329 / 632
Регистрация: 29.11.2010
Сообщений: 11,751
22.04.2012, 04:27     Класс || первый опыт #10
Деструктор нужно описывать, только если работаешь с памятью (new). В нём ты должен её освободить. В остальных случаях деструктор можно не описывать. А если работаешь с наследованием, желательно деструкторы делать виртуальными. Вызывется он когда объект выходит из области видимости программы, и его нужно уничтожить.
Yandex
Объявления
22.04.2012, 04:27     Класс || первый опыт
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru