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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
anubis1768
4 / 4 / 0
Регистрация: 23.02.2013
Сообщений: 151
#1

Как избежать такую конструкцию? - C++

31.07.2013, 23:45. Просмотров 552. Ответов 14
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <vector>
 
class Foo
{
    public:     
        Foo() {
            x = 0;
        }
        
        int operator[]( int a ) {
            return x;
        }
    
    private:
        int x;
};
 
int main() {
    std::vector< Foo* > foo( 20 );
    
    for( int i = 0; i < 20; i++ ) {
        foo[i] = new Foo;
    }
    
    //как избежать такую уродливую конструкцию?
    std::cout << foo[3]->operator[]( 2 );
    
    return 0;
}
Есть ли другие способы доступа?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2013, 23:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как избежать такую конструкцию? (C++):

Можно ли использовать такую конструкцию? - C++
Здраствуйте! Нужно ввести несколько работником тоесть их ФИО и зарплату. Можно ли использовать для ввода ФИО работников двумерный массив...

Как по-русски обозвать целиком эту конструкцию? - C++
Ту что в круглых скобках в операторе for? for (i=0; i&lt;n; ++i) { cout&lt;&lt;i; } В фигурных скобках - тело, вся первая строка - заголовок....

Помогите создать конструкцию как экспортируемую функцию shared DLL - C++
Я пишу на VB, но по некоторым причинам в VB невозможно реализовать необходимую мне конструкцию. И я прошу Вас помочь мне создать эту...

как избежать зацикливания - C++
Подскажите пожалуйста, как избежать зацикливания программы про вводе буквы вот в такой менюшке). Если я ввожу неправильную цифру...

Бесконечный цикл (как избежать?) - C++
Программа должна принимать только одно из трёх значений переменной 'destiny'. Если вводят любое другое значение, программа должна повторять...

Как избежать ошибок линковщика? - C++
Я только-только начал изучать С++(Borland). Взял первый попавшийся пример из helpa - printf #include &lt;stdio.h&gt; #include &lt;string.h&gt; ...

14
Fyret
186 / 172 / 13
Регистрация: 30.07.2013
Сообщений: 359
31.07.2013, 23:49 #2
C++
1
std::cout << (*foo[3])[2];
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
31.07.2013, 23:51 #3
это вроде как бросить пить, или кто насильно вливает?
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
01.08.2013, 00:37 #4
Для этого достаточно не использовать перегруженные операторы там, где они выглядят нелогично.

Не по теме:

Глагол "избегать" не переходной (подобно большинству глаголов, выражающих перемещения в пространстве) и используется с существительными в родительном падеже: избежать смерти, ситуации, неприятностей, конструкции.

2
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.08.2013, 03:25 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <vector>
 
class Foo
{
    public:     
        Foo() 
        {
            x = 0;
        }
        int get()
        {
            return x;
        }
 
        void set(int y)
        {
            x = y;
        }
    
    private:
        int x;
};
 
int main() 
{
    std::vector< Foo* > foo(20);
    
    for( int i = 0; i < 20; i++ ) 
    {
        foo[i] = new Foo;
        foo[i] ->set(i);
    }
    
    std::cout << foo[3] ->get() << std::endl;
 
    for( int i = 0; i < 20; i++ ) 
        delete foo[i];
        
    return 0;
}
1
Kuzia domovenok
2043 / 1888 / 172
Регистрация: 25.03.2012
Сообщений: 6,502
Записей в блоге: 1
01.08.2013, 04:18 #6
Цитата Сообщение от alsav22 Посмотреть сообщение
#include <iostream>
#include <vector>
class Foo
{
public:
Foo(){
x = 0;
}
int get(){
return x;
}
void set(int y){
x = y;
}
private:
int x;
};
int main()
{
std::vector< Foo* > foo(20);
for( int i = 0; i < 20; i++ ) {
foo[i] = new Foo;
foo[i] ->set(i);
}
std::cout << foo[3] ->get() << std::endl;
for( int i = 0; i < 20; i++ )
delete foo[i];
return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <vector>
class Foo{
    public:
            Foo(){
              x = 0;
           }
           int x;
};
int main() {
  std::vector< Foo* > foo(20);
  for( int i = 0; i < 20; i++ ) {
    foo[i] = new Foo;
    foo[i] ->x=i;
  }
  std::cout << (foo[i] ->x) << std::endl;
  for( int i = 0; i < 20; i++ ) 
    delete foo[i];
  return 0;
}
Можете не благодарить
0
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
01.08.2013, 04:32 #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
C++
1
std::cout << (foo[i] ->x) << std::endl;
Тут i нету

Добавлено через 2 минуты
Вот еще извращение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <vector>
 
struct Foo {
   Foo ( int x_ ) : x ( x_ ) { 
   }
   int x = 0 ;
} ;
 
int main ( ) {
   std::vector < Foo * > foo(20);
   for( int i = 0 ; i < foo.size ( ) ; i++ ) {    
      std::cout << ( foo[ i ] = new Foo ( i ) ) -> x << std::endl ;
      delete foo [ i ] ;
   }
}
1
alsav22
01.08.2013, 06:19
  #8

Не по теме:

Kuzia domovenok, цитату как понимать? Теряюсь в догадках...

0
Kuzia domovenok
2043 / 1888 / 172
Регистрация: 25.03.2012
Сообщений: 6,502
Записей в блоге: 1
01.08.2013, 10:49 #9
Цитата Сообщение от alsav22 Посмотреть сообщение
цитату как понимать? Теряюсь в догадках...

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
Тут i нету

Вот еще извращение

ну да, я и хотел просто сказать, что всё стоит делать public
0
Jupiter
01.08.2013, 11:04
  #10

Не по теме:

Kuzia domovenok, у вас же значение мемберу x присваивается два раза...как же так...это ж...на одну инструкцию больше...

1
Kuzia domovenok
2043 / 1888 / 172
Регистрация: 25.03.2012
Сообщений: 6,502
Записей в блоге: 1
01.08.2013, 11:19 #11
Цитата Сообщение от Jupiter Посмотреть сообщение
Kuzia domovenok, у вас же значение мемберу x присваивается два раза...как же так...это ж...на одну инструкцию больше...
1) Где у меня?
2) Почему именно у меня?
3) При чём тут вообще я?
0
anubis1768
4 / 4 / 0
Регистрация: 23.02.2013
Сообщений: 151
01.08.2013, 11:19  [ТС] #12
Не хотелось через set/get работать но наверно придется. Еще можно воспользоватся кодом из первого поста. но я себе представляю. как ето будт виглядит запутанно.
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.08.2013, 11:27 #13
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
1) Где у меня?
2) Почему именно у меня?
3) При чём тут вообще я?
В чем суть вашей оптимизации? Убрали сеттер который с вероятностью 0.99 был бы заинлайнен. А конструктор оставили
0
Kuzia domovenok
2043 / 1888 / 172
Регистрация: 25.03.2012
Сообщений: 6,502
Записей в блоге: 1
01.08.2013, 11:33 #14
Цитата Сообщение от Jupiter Посмотреть сообщение
Убрали сеттер который с вероятностью 0.99 был бы заинлайнен.
А ты тему читай: автору не оптимизация была нужна, а упростить доступ к полю объекта

Не по теме:

кстати, зачем он вообще использует оператор [], если индекс ни на что не влияет


Какая, нафиг, оптимизация? Я взял то, что было у автора, и убрал приват и оператор всего лишь!
0
anubis1768
4 / 4 / 0
Регистрация: 23.02.2013
Сообщений: 151
01.08.2013, 11:48  [ТС] #15
Kuzia domovenok, я просто навел корявый пример.
0
01.08.2013, 11:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2013, 11:48
Привет! Вот еще темы с ответами:

Как избежать округления дробных чисел - C++
как сделать что бы не округляло ??? float t; float z,m; using namespace std; void main(void) { m=-pow(5,2)/2;

Как избежать использование глобальных объектов - C++
Есть два класса. В первом классе должен быть метод, который работает с объектами второго класса. Все получается, если создавать глобальные...

Как избежать округления дробных чисел - C++
не виводит дробь а только целие числа. где проблема ? #include &lt;iostream.h&gt; #include &lt;math.h&gt; int mat(double x,double y){ ...

Как избежать использования кучи проверок? - C++
В общем есть файл конфига, в котором хранятся переменные, так вот, я хотел бы узнать, можно ли избежать кучи проверок, ведь при загрузке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.