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

Член-ссылка на другой член класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Умножение матриц и вычитание http://www.cyberforum.ru/cpp-beginners/thread174890.html
Дано квадратные матрици А и B порядка N Получить матрицу AB - BA
C++ Двухмерный массив с динамическим определением размера, ввод/вывод реализуется благодаря адресной арифметики В матрице B=(bij)mxn найти S-сумму элементов строки и столбца, содержащих max Bij. Сформировать матрицу F: Г B, если S > 0 F= < удалив из матрицы B строку с максимальным L... http://www.cyberforum.ru/cpp-beginners/thread174837.html
C++ Попадает ли точка с указанными координатами в область на графике
суть программы - определить, попадает ли точка с указанными координатами в область на графике #include <math.h> #include <iostream.h> #include <conio.h> void main() { float x, y, b; int r =...
C++ Вывести все числа от 1 до N, делящиеся на каждую свою цифру
Помогите пожалуйста написать программу: Написать программу, которая для числа n, введённого с клавиатуры 1. Выводит все числа от 1 до n, делящиеся на каждую свою цифру. Пример: 24 делится на 2...
C++ Сколько дней прожил человек http://www.cyberforum.ru/cpp-beginners/thread174807.html
Помогите пожалуйста бедной студентке! Задание такое : Определить сколько дней прожил человек от введённой им даты рождения (день,месяц,год)! Язык только начала изучать, поэтому прошу полный код в C,...
C++ Определить максимум среди сумм элементов диагоналей Дана целочисленная квадратная матрица. Определить: 1) произведение элементов в тех строках, которые не содержат отрицательных элементов; 2) максимум среди сумм элементов диагоналей, параллельных... подробнее

Показать сообщение отдельно
ccccfr
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 9
12.01.2013, 22:58
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Dot2D {
    Dot2D () : width(x), height(y) {};
    int x;
    int y;
    int & width ;
    int & height ;
};
 
//!!!ТУТ ЕСТЬ ОПАСНОСТЬ
const Dot2D c;
c.x++;//нельзя т.к.  с - константа
c.width++; 
/*МОЖНО, т.к. константность объекта не запрещает использовать члены-ссылки для изменения того,
 на что они ссылаются (то на что ссылается ссылка, не есть часть объекта => константность 
 объекта на неё не распространяется. Если оказалось что эта ссылка ссылается на другой член, то
  это считается будто у нас есть просто ссылка на него и константность объекта тут не причем)
*/
По этом у я бы сделал так

C++
1
2
3
4
5
6
7
class Dot2D 
{
    int x;
    int y;
    int & width() { return x; } ; // не конст => для конст объекта вызвать нельзя
    int & height() { return y; } ; 
};
Такой, вроде, не должен быть менее оптимизированным, по сравнению с вариантом в начале сообщения.
Ведь, функции, определенные в определении класса, по умолчанию inline , значит на их место просто подставится ссылка на х (ведь компилятор способен сделать такую простую подстановку).
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru