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

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

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

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

22.04.2012, 02:01. Просмотров 517. Ответов 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++
Не могу найти ошибку, первый опыт в С++. C++
Самый первый опыт С++. На экран выводит не то, что ввёл. C++
C++ Переставить местами первый минимальный и первый максимальный элементы массива из n вещественных чисел
C++ Первый класс. Функция-член
Очередь «первый вошел — первый вышел» (FIFO) C++
Релизация очереди (первый пришел первый ушел) в классе C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
2445 / 1650 / 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
бжни
2445 / 1650 / 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
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,917
Записей в блоге: 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
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,917
Записей в блоге: 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++
Класс: преобразовать целочисленный массив, прибавив к нечетным числам первый элемент C++
C++ Первый опыт с DirectX9. Странное поведение программы
C++ Написать класс "стек" (первый пришел, последний ушел)
C++ Класс "Строка" содержащий метод, который меняет местами первый и последний символы строки

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

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

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