Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
rigodigo
0 / 0 / 0
Регистрация: 08.10.2009
Сообщений: 5
#1

Использование *& - C++

27.08.2011, 08:08. Просмотров 417. Ответов 7
Метки нет (Все метки)

Помогите пожалуйста! На форуме не нашёл ответа.. объясните следующую строку void func1(class1*&)

C++
1
2
3
4
5
6
class class2
{
class2();
~class2();
void func1(class1*&);//что означает class1*&
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2011, 08:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Использование *& (C++):

Ошибка: multiple definition of `void std::swap<A>(A&amp;, A&amp;) - C++
Хочу специализировать swap для своего класса. Получаю ошибку. Вот код:#ifndef A_H #define A_H #include &lt;string&gt; class A { ...

Синтаксис. Использование & - C++
Скажите, пожалуйста, чем отличается foo(std::string a); от этого foo(std::string&amp; a); ?

Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration? - C++
Пытаюсь скомпилировать программу пишет friend ostrem&amp; operator &lt;&lt;(ostream&amp; outs, const Rational&amp;); - invalid function declaration. ...

В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура x*x+y*y<25&&x*x+y*y>=9& - C++
В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура...

ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка? - C++
void Array::getArray() // вывод массива { for (int ix = 0; ix &lt; size; ix++) cout &lt;&lt; setw(5) &lt;&lt; ptr; // вывод элементов...

Порядок вычисления: операторы «|» и «||», «&» и «&&» - C++
В Java булевые операторы «|» и «||», и «&amp;» и «&amp;&amp;» отличаются друг от друга порядком вычеслений, а в C++ так же как и в Java или...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
27.08.2011, 10:10 #2
Это ссылка на указатель(reference-to-pointer)
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
#include <iostream>
 
class SomeClass
{
    public:
        int id_;
 
    public:
        SomeClass(int id)
            : id_(id)
        {
        }
 
        int id() const
        {
            return id_;
        }
};
 
void CreateNewSomeClassObj(SomeClass*& dest_ptr, int id)
{
    // работаем непосредственно с переданным указателем, а не его копией
    dest_ptr = new SomeClass(id);
}
 
int main()
{
    SomeClass* some_class;
    CreateNewSomeClassObj(some_class, 1);
    std::cout << some_class->id() << '\n';
    delete some_class;
 
    CreateNewSomeClassObj(some_class, 2);
    std::cout << some_class->id() << '\n';
    delete some_class;
 
    return 0;
}
Zverit
Уничтожитель печенек
277 / 205 / 21
Регистрация: 07.02.2010
Сообщений: 723
27.08.2011, 10:10 #3
Ссылка на указатель объекта класса
-=ЮрА=-
Заблокирован
Автор FAQ
27.08.2011, 10:23 #4
Цитата Сообщение от rigodigo Посмотреть сообщение
void func1(class1*&);//что означает class1*&
В функцию передётся уазатель на адресс переменной принадлежащей class1, вобще для лучшего понимания лучше рассмотреть случай попроще, например:

C++
1
void func1(double &val);
означает что в функцию передаём ссылку на переменную val, указанная конструкция позволяет при изменении значения val внутри функции, изменить значение переменной и вне пределах функции
C++
1
2
3
4
5
6
7
8
9
10
11
12
void func1(double &val);
{
    val += 3.5;
}
 
int main()
{
    double a = 0;
    func1(a);//аналогично а += 3.5;
    cout<<a;
    return 0;
}
Т.е передавая параметр по ссылке можем делать тип функции void и не писать вконце её тела return. Это может показаться не нужным, но иногда функция должна возвращать сразу несколько параметров, причём разнотипных, а вот вернуть return можно лишь 1-у переменную (1-н указатель на массив))

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool func1(double &val1, int &val2);
{
    bool ret = false;
    if((val = val1 / val2) < 2)
          ret = true;
    val2 = 1;
    return ret;
}
 
int main()
{
    double a = 3;int b = 2;
    bool c = func1(a,b);//а
    cout<<a<<" "<<b<<" "<< c ? 1 : 0<<"\r\n";
    //Вывод будет a = 1,5 b = 1, c = 1
    return 0;
}
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
27.08.2011, 14:11 #5
я такое встречал когда необходимо выделить память данным переданным как параметр.. аналог **, только без разыменования
LosAngeles
Заблокирован
27.08.2011, 16:37 #6
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
В функцию передётся уазатель на адресс
ссылка на указатель
rigodigo
0 / 0 / 0
Регистрация: 08.10.2009
Сообщений: 5
27.08.2011, 19:56  [ТС] #7
спасибо большое за ответы, непонятно следующее, как она может использоваться, когда после &* ничего нет?
было бы
C++
1
void func1(class1*& b1);
я бы понял что потом можно использовать эту b1, а тут просто *&
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.08.2011, 20:02 #8
rigodigo, в прототипе функции аргументы можно не обзывать. В определении имя уже должно присутствовать (если аргумент используется в теле функции).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2011, 20:02
Привет! Вот еще темы с ответами:

Friend ostream& operator<<(ostream& stream, CArr& obj); - C++
CArr.h #pragma once class CArr{ int* arr = nullptr; int size = 10; void swap(int *a, int *b); void swap(int &amp;a, int &amp;b); ...

Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &) - C++
Добрый день. Как осуществляется выделения памяти под перегруженный оператор ввода данных в пользовательский тип? Ведь мы заранее не можем...

В программе объявлена переменная int x=1; определить значение выражения х>0 && x<1 ? 10/x : 10*x - C++
ответ уже известен, 10. Проблема в том что я не знаю каким образом он был получен.. а точнее какую функцию выполняет &quot;:&quot; здесь. просьба...

Как проверить, принадлежит ли символ заданному диапазону m...n, кроме if (c <= n && c >= m) ? - C++
есть какая-нибудь более короткая запись для проверки, принадлежит ли символ заданному диапазону m...n, кроме if (c &lt;= n &amp;&amp; c &gt;= m) ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.08.2011, 20:02
Ответ Создать тему
Опции темы

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