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

Касательно указателей и ссылок. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Кавычки в system http://www.cyberforum.ru/cpp-beginners/thread437866.html
Добрый день, столкнулся со следующей проблемой. В system из библиотеки stdlib, когда передаю значение в еще одних кавычках, компилятор выдает ошибку. Наример system("SHUTDOWN -r -f -t 20 -c "Don`t panic. The system will reboot in 20 seconds.""); Тоже самое, когда беру в кавычки кирилицу. Как избежать ошибки?
C++ проверьте задачу проверьте пожалуйста мое решение вот условие: Три фрагмента нижеприведенной программы, выделенные жирным курсивом, представляют собой решение одной и той же подзадачи для различных исходных данных – параметров этой подзадачи. Для подходящей подзадачи опишите процедуру (функцию) с параметрами и без глобальных переменных. Перепишите нижеприведенную программу в более компактной форме, используя... http://www.cyberforum.ru/cpp-beginners/thread437861.html
Включение, как правильно сделать инициализацию C++
Вот код: #ifndef WINE_H_ #define WINE_H_ #include <iostream> #include <string> #include <valarray> template<typename T1, typename T2> class Pair { T1 a;
C++ Найдите ошибку
Вот пример Вот решение #include<iostream.h> #include<math.h> void main ()
C++ запуск конструкторов http://www.cyberforum.ru/cpp-beginners/thread437846.html
class String { private: strCount* psc; public: String() // конструктор { psc = new strCount("NULL"); } //--------------------------------------------------------- String(char* s) // конструктор { psc = new strCount(s); }
C++ Перевисти код #include <iostream.h> #include <stdlib.h> void show(float **a,int n); void fill(float **a,int n); void fill_t(float **a,int n); float scalyar(float **a,float **b,int col1,int col2,int n); void ort(float **a,float **r,float **t,int n); void multiply(float **r,float **t,float **ans,int n); void get_r_mat(float **a,float **r,float **t,int col,int n); подробнее

Показать сообщение отдельно
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
30.01.2012, 12:42     Касательно указателей и ссылок.
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
42
#include <iostream>
 
class Foo
{
public:
    Foo(int foo):
    m_foo(new int(foo))
    {
    }
 
    Foo(const Foo& source):
    m_foo(new int(source.foo()))
    {
    }
 
    ~Foo()
    {
        delete m_foo;
    }
 
    int foo() const
    {
        return *m_foo;
    }
 
private:
    int *m_foo;
};
 
Foo& bar()
{
    Foo res(10);
 
    return res;
}
 
int main()
{
    std::cout << bar().foo() << std::endl; // Ooops!
 
    return 0;
}
Добавлено через 8 минут
Вот так понагляднее будет:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
 
class Foo
{
public:
    Foo(int foo):
    m_foo(new int(foo))
    {
        std::cout << "Foo::Foo(int) : " << m_foo << std::endl;
    }
 
    Foo(const Foo& source):
    m_foo(new int(source.foo()))
    {
        std::cout << "Foo::Foo(const Foo&) : " << m_foo << std::endl;
    }
 
    ~Foo()
    {
        std::cout << "Foo::~Foo() : " << m_foo << std::endl;
        
        delete m_foo;
    }
 
    int foo() const
    {
        return *m_foo;
    }
 
private:
    int *m_foo;
};
 
Foo& bar()
{
    std::cout << "Foo& bar() : before Foo res(10);" << std::endl;
    Foo res(10);
    std::cout << "Foo& bar() : after Foo res(10);" << std::endl;
    
    std::cout << "Foo& bar() : res.foo() : " << res.foo() << std::endl;
    
    return res;
}
 
int main()
{
    std::cout << "int main() : before Foo goo = bar();" << std::endl;
    Foo goo = bar();
    std::cout << "int main() : after Foo goo = bar();" << std::endl;
    
    std::cout << "int main() : goo.foo() : " << goo.foo() << std::endl; // Ooops!
 
    return 0;
}
Вывод:
Код
int main() : before Foo goo = bar();
Foo& bar() : before Foo res(10);
Foo::Foo(int) : 0x5c0e78
Foo& bar() : after Foo res(10);
Foo& bar() : res.foo() : 10
Foo::~Foo() : 0x5c0e78
Foo::Foo(const Foo&) : 0x5c0e78
int main() : after Foo goo = bar();
int main() : goo.foo() : 6041520
Foo::~Foo() : 0x5c0e78
Обратить внимание на строку 7. Деструктор вызывается до копирования объекта. Беда!
 
Текущее время: 01:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru