Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2010, 17:46   #1
Superlotles
Пользователь
 
Аватар для Superlotles
 
Регистрация: 18.08.2009
Сообщений: 86
По умолчанию const при работе с классами

Подскажите, для чего используют "const" в подобных выражениях:
int get_y() const{
return y;
}
Вот весь код:
Код:
#include <stdafx.h>
#include <conio.h>
using namespace std;
class Point{
private:
	int x,y;
public:
	Point(){
}
	Point(int new_x, int new_y){
		set(new_x,new_y);
	}
	Point(const Point& src){
		set(src.x, src.y);
	}
	Point add(const Point& pt){
		Point new_pt;
		new_pt.x=x+pt.x;
		new_pt.y=y+pt.y;
		return new_pt;
	}
	Point sub(const Point& pt){
		Point new_pt;
		new_pt.x=x-pt.x;
		new_pt.y=y-pt.y;
		return new_pt;
	}
	Point operator+(const Point& pt){
		return add(pt);
	}
	Point operator-(const Point& pt){
		return sub(pt);
	}
	void set(int new_x,int new_y){
		if (new_x<0)
			new_x*=-1;
		if (new_y<0)
			new_y*=-1;
		x=new_x;
		y=new_y;
	}
	int get_x() const{
		return x;
	}
	int get_y() const{
		return y;
	}
};
int main(){
	Point point1(20,20);
	Point point2(0,5);
	Point point3(-10,25);
	Point point4=point1+point2+point3;
	cout << "The point is " << point4.get_x();
	cout << ", " << point4.get_y() << "." << endl;
	return 0;
}
Skype: Lotles-XXXX
Superlotles вне форума Ответить с цитированием
Старый 26.06.2010, 17:51   #2
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Это константные-функции члены. Суть в том, что если в такой функции попытаться изменить состояние класса, то компиллятор будет на вас ругаться.
mMAg вне форума Ответить с цитированием
Старый 26.06.2010, 18:04   #3
Superlotles
Пользователь
 
Аватар для Superlotles
 
Регистрация: 18.08.2009
Сообщений: 86
По умолчанию

Цитата:
Сообщение от mMAg Посмотреть сообщение
Это константные-функции члены. Суть в том, что если в такой функции попытаться изменить состояние класса, то компиллятор будет на вас ругаться.
Как я понял вы это имели ввиду, но здесь код компилируется без проблем
Код:
#include <stdafx.h>
#include <conio.h>
using namespace std;
class Point{
private:
	int x,y;
public:
	Point(){
}
	Point(int new_x, int new_y){
		set(new_x,new_y);
	}
	Point(const Point& src){
		set(src.x, src.y);
	}
	Point add(const Point& pt){
		Point new_pt;
		new_pt.x=x+pt.x;
		new_pt.y=y+pt.y;
		return new_pt;
	}
	Point sub(const Point& pt){
		Point new_pt;
		new_pt.x=x-pt.x;
		new_pt.y=y-pt.y;
		return new_pt;
	}
	Point operator+(const Point& pt){
		return add(pt);
	}
	Point operator-(const Point& pt){
		return sub(pt);
	}
	void set(int new_x,int new_y){
		if (new_x<0)
			new_x*=-1;
		if (new_y<0)
			new_y*=-1;
		x=new_x;
		y=new_y;
	}
	int get_x(Point& pt) const{
		pt.x=pt.x+10;
		return x;
	}
	int get_y() const{
		return y;
	}
};
int main(){
	Point point1(20,20);
	Point point2(0,5);
	Point point3(-10,25);
	Point point4=point1+point2+point3;
	cout << "The point is " << point4.get_x(point1);
	cout << ", " << point4.get_y() << "." << endl;
	return 0;
}
Напишите небольшой примерчик, если не трудно
Skype: Lotles-XXXX

Последний раз редактировалось Superlotles; 26.06.2010 в 18:07.
Superlotles вне форума Ответить с цитированием
Старый 26.06.2010, 19:11   #4
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Здесь работает без проблем, поскольку такая функция не должна изменять состояния экземпляра класса, которому принадлежит.
Если вы попробуете написать

Код:
int get_y() const{
y = y+1;
		return y;
	}
вот тогда должен начать ругаться.
А у вас в примере вы передали в функцию постороннюю переменную. С ней вы можете делать, что душе угодно.
mMAg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибки при работе с WebBrowser Matra Компоненты Delphi 3 08.05.2010 08:15
ошибка при работе с указателем Vladss Общие вопросы C/C++ 22 29.07.2009 03:58
Метод locate при работе с бд WinApi Помощь студентам 0 03.05.2009 16:08
Проблема при работе с БД HAMMAN БД в Delphi 3 29.03.2008 14:42
Ошибка при работе с БД malevich БД в Delphi 8 25.11.2007 15:10