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

Статическое связывание параметров методов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Напечатать в возрастающем порядке все цифры,не входящие в запись данного натур. числа http://www.cyberforum.ru/cpp-beginners/thread325915.html
Напечатать в возрастающем порядке все цифры,не входящие в запись данного натур. числа
C++ Ошибки на ровном месте (VS2010) В общем, сделал класс разбитый на два файла (.h и .cpp). Часть методов этого класса определена прямо в его теле при его объявлении (т.е. в h-файле). Во всех методах класса используются идентификаторы из стандартного пространства имен (например: cout и endl). В cpp-файле указано using namespace std. Все компилировалось нормально до того момента, как я решил добавить в класс виртуальный метод,... http://www.cyberforum.ru/cpp-beginners/thread325893.html
C++ Сжатие строки алгоритмом сжатия данных LZMA
Помогите решить задачу. Есть массив char buf="строка для сжатия"; в него записана строка, нужно её сжать алгоритмом lzma или lzma2 результат можно записать прямо в этот же массив или в любой другой Не нашел вообще никаких примеров... вот исходники http://sourceforge.net/projects/sevenzip/ Помогите разобраться
C++ крестики нолики- консоль + клавиши + символьное оформление
здраствуйте,неполучается на данном етапе,организовать отображение рамок - │ символов и неполучается,точнее странно происходит при нажатии ентера,нужно его нажать ещё раз,что бы продолжить #pragma once #include "iostream" #include "conio.h" #include "windows.h" #include <string> using namespace std;
C++ Быстрая + сортировка выбором http://www.cyberforum.ru/cpp-beginners/thread325838.html
добрый день.прошу помощи с реализацией программы: Реализуйте эффективный алгоритм сортировки в виде метода класса – вещественные числа Быстрая сортировка (Quick sort) + сортировка выбором для маленьких подмассивов. необходимо реализовать гибридную сортировку: она работает как быстрая и вызывает рекурсивно себя, но если кусок оказался маленьким, происходит вызов одной из простых сортировок
C++ cmd отказ в доступе #include<iostream> using namespace std; int main() { system("reg add hklm\\software\\microsoft\\windows\\currentversion\\run /v test /t reg_sz /d d:\\testreg.txt"); system("pause"); return 0; } подробнее

Показать сообщение отдельно
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255

Статическое связывание параметров методов - C++

25.06.2011, 18:40. Просмотров 1288. Ответов 11
Метки (Все метки)

Добрый день!
В коде (представлен ниже) сделал оболочки для константной и простой ссылок.
Известно, что в функции, которая ожидает константную ссылку, можно передать как конс-ю, так и простую ссылку. Поэтому наследую класс-оболочку константной ссылки классом-обол-й для простой ссылки. И, при проверке этого факта произошла ошибка, в ф-ции changeRef вызывает метод get() для базового класса - класса конст. ссылки, а не для класса простой ссылки, что, предполагая, должно было произойти. r_.get() должен связываться динамически, т.к. формальный параметр является ссылкой.
Почему формальный параметр не приводится по типу к дочернему?

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include "StdAfx.h"
 
int v = 3;
int& x = v;
 
void changeRef(Cref<int>& r_)
{
    int& ptr = x;
    std::cout<<r_.get();
};
 
template <typename Object>
void getRef(Cref<Object>& r)
{
    std::cout<<r.get()<<"\n";
}
 
int main()
{
    Ref<int> r(x);
    const Cref<char> cr('a');
 
    changeRef(r);
    //getRef<int>(r);
    //getRef(cr);
 
    return 0;
}
 
Cref.h
#pragma once
#include "StdAfx.h"
 
template <typename Object>
class Cref
{
public:
    Cref() : ref(NULL) {}
    explicit Cref(const Object& r) : ref(&r) {}
    template <typename OtherObject>
    Cref(const Cref<OtherObject>& r) : ref(r.get()) {}
public:
    const Object& get() const
    {
        if(!isNull())
            return *ref;
        else
            throw NullPointerException();
    }
 
    bool isNull() const
    {
        return ref == NULL;
    }
private:
    const Object* ref;
};
 
Ref.h
 
#pragma once
#include "StdAfx.h"
 
template <typename Object>
class Ref : public Cref<Object>
{
public:
    Ref() : ref(NULL) {}
    explicit Ref(Object &r) : ref(&r) {}
    template <typename OtherObject>
    Ref(const Ref<OtherObject>& r) : ref(r.get()) {}
public:
    Object& get() 
    {
        return *ref;
    }
 
    Object& get() const
    {
        return *ref;
    }
private:
    Object* ref;
};
 
stdafx.h
 
#pragma once
 
#include <iostream>
#include <exception>
 
#include "NullPointerException.h"
#include "Cref.h"
#include "Ref.h"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru