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

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

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

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

22.04.2012, 02:01. Просмотров 527. Ответов 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; 
}
А теперь вопрос: а как мне с этим классом работать? Как "запустить" конструктор, ф-ию печати х и у,
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2012, 02:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс || первый опыт (C++):

Не могу найти ошибку, первый опыт в С++. - 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();
}
1
Ieroglif
18 / 18 / 1
Регистрация: 23.06.2011
Сообщений: 238
22.04.2012, 02:15  [ТС] #3
Пардон, поспешил с сообщение - невнимателен был.

То есть не всегда необходимо в аргументах функций указывать используемые переменные? В моём случае - оттого, что была указана область видимости?
0
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
0
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. Приведите текст ошибки.
0
Ieroglif
18 / 18 / 1
Регистрация: 23.06.2011
Сообщений: 238
22.04.2012, 02:38  [ТС] #6
Так, а деструктор?
C++
1
~f_class(){delete x; delete y;}
delete работать отказывается. Альтернативы?

Добавлено через 56 секунд
pobedinsky, а проблема эта уже решена, сейчас вопрос о деструкторе - его описании.
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 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 и не более
1
Ieroglif
18 / 18 / 1
Регистрация: 23.06.2011
Сообщений: 238
22.04.2012, 02:44  [ТС] #8
Почему забыть?

Всё же хочется иметь представление как работать с ним.
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 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;//ты же так не делаешь??? Это ошибка!!!
}
Третье, если не работаешь с динамической памятью, или какими ещё подобными ресурсами, оставляй деструктор по умолчанию.
Ну и виртуальный деструктор изучи, когда будешь изучать наследование и виртуальные функции, но пока не беги вперёд паровоза.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
22.04.2012, 04:27 #10
Деструктор нужно описывать, только если работаешь с памятью (new). В нём ты должен её освободить. В остальных случаях деструктор можно не описывать. А если работаешь с наследованием, желательно деструкторы делать виртуальными. Вызывется он когда объект выходит из области видимости программы, и его нужно уничтожить.
1
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++
Здравствуйте! Помогите пожалуйста, очень мало времени осталось, а сдать нужно. Вот задание (Написать класс &quot;стек&quot; (первый пришел,...

Класс "Строка" содержащий метод, который меняет местами первый и последний символы строки - C++
Написать программу чтобы первый и последний символы строки менялись местами. На экран выводился оригинал и измененная строка. Все это с...

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени? - C++
На самом деле ничё фантастического я не прошу, ведь: template &lt;class T&gt; class matrix { friend class diagonal; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.04.2012, 04:27
Ответ Создать тему
Опции темы

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