С++ классы class, объекты
Тэги: язык С основы язык С классы язык С ошибки компилятора
📅26-10-2018 👁433
Класс - это ТИП ДАННЫХ, который задает формат Объекта.
Пример создания экземпляра класса:
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;
Оставить свой ответ: