С++ классы class, объекты

Класс - это ТИП ДАННЫХ, который задает формат Объекта.


 


Пример создания экземпляра класса:


 


    class test {
        int i,j;
        int ar[3];
    public:
        int pub;
        void init();
        void init2();
    };

 


 


Переменные экземпляра i,j закрытые. После слова public все переменные и функции будут открытыми.


Например:


 


    test Obj1; // СОЗДАЕМ ОБЪЕКТ Obj1
    Obj1.i = 10; // присваиваем 10 в закрытую переменную, вызываем ОШИБКУ
    Obj1.pub = 10; // присваиваем 10 в открытую
    cout << Obj1.pub; // выводим 10

 


 


Здесь компилятор выдаст ошибку error: 'int main()::test::i' is private error: within this context


Потому что доступ к закрытой переменной могут получить только другие члены класса test.


 


Чтобы реализовать функцию класса, нужно записать так:


 


void test::init2 (int k){
    if (i==10) {cout << "full"; return;}
    i++;
    ar[i] = k;
}

 


 


Причем делать это нужно за пределами main() иначе компилятор выдаст ошибку:


error: qualified-id in declaration before '(' token error: expected '}' at end of input


 


Через двойное двоеточие :: (оператор разрешения области видимости) мы определяем функцию класса, она уже может получать доступ к закрытой переменной i и к массиву ar[]


 


Чтобы вызвать функцию класса:


 


Obj1.init2(2);

 


 Чтобы эта функция корректно работала с закрытой переменной i нужно инициализировать эту переменную и присвоить ей какое то значение. Это можно сделать используя открытую функцию init ():


 


void test::init (){
    i = j = 0;
}
main()
Obj1.init()

Если теперь вызвать функцию Obj1.init2(44); например 4 раза, то переменная i будет увеличиваться и результат работы:


1
2
3
full


Простая программа с объектом, доступом к защищенной переменной при помощи сетера



В этом коде показано как получить доступ к защищенной перенной в классе при помощи сеттера и геттера. А также зачем нужен this и как он наглядно показывает свое назначение:
#include <iostream>
using namespace std;
class TTest
{
 public:
     void SetX (int x)
     {
         if (x<0) x=-x;
         this->x = x;
     }
     int GetX () {return x;}
 private:
    int x;
};
int main(void)
{
    TTest test;
    int temp;
    cin >> temp;
    test.SetX(temp);
    cout << "your:" << test.GetX();
    return 0;
}

В этом примере this->x = x; говорит, что нужно присвоить значение параметра функции x для переменной х нашего объекта test.
В гетере GetX () {return x;} можно записать и просто возврат х или return this->x это будет одно и тоже.


Конструкторы и декструкторы


Для инициализации переменных i и j можно использоваться конструктор, который вызывается при создании объекта.


Вместо функции void init() напишем конктрустор, его имя должно совпадать с именем класса.


 


class test {
    int i,j;
    int ar[3];
public:
    test();//конструктор
    int pub;
    void init2(int k);
};
test::test (){
    i = j = 0;
    cout << "inited\n";
}

Конструкторы не возвращают значений, нельзя указывать их тип, даже void.


 


Деструктор помогает уничтожить глобальные объекты, он работает также, только записываетс:


~test();


test:~test(){} // инициализация деструктора


 


Передача параметра в конструктор


Чтобы передать параметр нужно записать:


 


test Obj1(72);


или


test Obj1 = test(72);


 


Если конструктор принимает только 1 аргумент, то можно записать так:


 


test Obj1 =72;


 



Оставить свой ответ:

Имя:*
E-Mail:
Вопрос:
Skolko buдет пять пдюс сeмь?
Ответ:*
QQpedia21.ru - cамые интересные вопросы