Данные класса

static const позволяет инициализировать значения членов класса прямо в его объявлении:

class cClass

{

private:

static const int i = 2; // Инициализировали значение прямо в объявлении класса

public:

cClass() {};

~cClass() {};

int GetI() { return i; };

};

Методы класса

Методы класса, если объявить их как const, будут считать константой this. Это значит что они не смогут менять значения переменных класса.

class cClass

{

private:

int i;

public:

cClass(int a) {}

void Function() const

{

i = 5; // Не работает, т.к. this считается константой

}

};

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

Перегрузка методов класса

Напишем класс с двумя одноименными методами, один из которых сделаем const:

class cClass

{

private:

int i;

public:

cClass(int a)

{

i = a;

cout << "Constructor makes x = " << i << endl;

}

void Function()

{

cout << "f() tell x = " << i << endl;

}

void Function() const

{

cout << "f() const tell x = " << i << endl;

}

};

Теперь создадим 2 экземпляра класса — Class и Class2, при этом Class2 сделаем const:

int main()

{

cClass Class(3);

Class.Function();

cClass const Class2(3);

Class2.Function();

char gg[20];

scanf(gg, 20);

return 0;

}

Запустив программу, посмотрим какой метод будет вызваться для каждого из них:

Constructor makes x = 3

f() tell x = 3

Constructor makes x = 3

f() const tell x = 3

Очевидно что константный объект вызвал константный же метод, а наоборот - обычный объект вызвал обычным метод. Т.о. const можно использовать для перегрузки методов класса, необходимо только учитывать — при отсутствии не-const методов, по умолчанию будут использоваться const-методы.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: