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

виртуальные базовые классы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Какие требования нужно выполнить, чтобы стать Junior developer, Middle и Senior developer? http://www.cyberforum.ru/cpp-beginners/thread929530.html
Быть может не совсем в ту ветку форума написал, но мне показалось, что здесь я смогу получить квалифицированный ответ с большей вероятностью! Если что, уж извини админ! Пока только учусь в университете. Хочется понять как, кому и за что присваиваются квалификации Junior, Middle, Senior developer. Какие требования должен выполнить для этого программист? Сколько времени в среднем требуется на...
C++ error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа) Добрый день,помогите пожалуйста разобраться почему не работает код.Заранее спасибо. #include <stdio.h> #include <iostream> int Add (int x, int y ); { std::cout << "In Add(), received " << first << " and " << second << endl ; return (first + second); } http://www.cyberforum.ru/cpp-beginners/thread929501.html
C++ shared_ptr и vector
почему в vector нельзя засунуть shared_ptr ? c:\qt\tools\mingw48_32\lib\gcc\i686-w64-mingw32\4.8.0\include\c++\ext\new_allocator.h|120|error: use of deleted function 'boost::shared_ptr<Ncom_din_un::Cdinamic_unit>::shared_ptr(const boost::shared_ptr<Ncom_din_un::Cdinamic_unit>&)'| Добавлено через 31 секунду #if __cplusplus >= 201103L template<typename _Up, typename... _Args> ...
winapi и консоль C++
Добрый день. Если приложение - некое подобие чата. Запускается одна и таже апликуха 2 раза и соединяется друг к другу посредством 4 сокетов (по 2 на каждое: клиент и сервер). Вся проблема в том, что когда тайпается в обоих консолях и при отправки сообщение с одной на 2-ю, весь вводимый текст на 2-й исчезает (перекрывается поступившим сообщением с 1-й). Как реализовать по средством windows чтоб...
C++ Шаблон http://www.cyberforum.ru/cpp-beginners/thread929452.html
Имеется код: //header #include <iostream> #include <string> #include <valarray> using namespace std; template <class T1, class T2> class Pair { private:
C++ new[] - delete[] Всем привет. Глупый вопрос, но тем не менее, он меня крайне заинтересовал. Вот например, есть такой код: void main() { int *arr = new int; delete arr; } подробнее

Показать сообщение отдельно
slipp1
12 / 11 / 1
Регистрация: 09.11.2012
Сообщений: 365
Записей в блоге: 1
27.07.2013, 15:33  [ТС]     виртуальные базовые классы
Цитата Сообщение от Jupiter Посмотреть сообщение
это вы у нас спрашиваете?


при виртуальном наследовании за инициализацию предка - Base отвечает потомок - Multiple
тогда по логике должно быть так?
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
// Using virtual base classes.
#include <iostream>
using std::cout;
using std::endl;
 
#include <string>
using std::string;
 
// class Base definition
class Base 
{
public:
    Base(string message)
    {
        cout<<message<<endl;
    }
   virtual void print() const = 0; // pure virtual
}; // end class Base
 
// class DerivedOne definition
class DerivedOne : virtual public Base 
{
public:
    /*
    DerivedOne(string message)
        :Base(message)
    {}
    */
   // override print function                    
   void print() const 
   {
      cout << "DerivedOne\n";
   } // end function print
}; // end DerivedOne class
 
// class DerivedTwo definition
class DerivedTwo : virtual public Base 
{
public:
    /*
    DerivedTwo(string message)
        :Base(message)
    {}
    */
   // override print function                    
   void print() const 
   {
      cout << "DerivedTwo\n";
   } // end function print
}; // end DerivedTwo class
 
// class Multiple definition
class Multiple : public DerivedOne, public DerivedTwo 
{
public:
    Multiple(string message)
        :Base(message)//DerivedOne(message), DerivedTwo(message)
    {}
   // qualify which version of function print
   void print() const                        
   {                                         
      DerivedTwo::print();                   
   } // end function print                   
}; // end Multiple class
 
int main()
{
    Multiple both("Multiple="); // instantiate Multiple object
    DerivedOne one("DerivedOne="); // instantiate DerivedOne object
    DerivedTwo two("DerivedTwo="); // instantiate DerivedTwo object
    
    // declare array of base-class pointers and initialize
    // each element to a derived-class type
    Base *array[ 3 ];
    array[ 0 ] = &both;
    array[ 1 ] = &one;
    array[ 2 ] = &two;
    
    // polymorphically invoke function print
    for ( int i = 0; i < 3; i++ )
        array[ i ]->print();
    
    return 0;
} // end main
Добавлено через 9 минут
вроде заработало.
только не до конца разобралсо... почему??

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
// Using virtual base classes.
#include <iostream>
using std::cout;
using std::endl;
 
#include <string>
using std::string;
 
// class Base definition
class Base 
{
public:
    Base(string message)
    {
        cout<<message<<endl;
    }
   virtual void print() const = 0; // pure virtual
}; // end class Base
 
// class DerivedOne definition
class DerivedOne : virtual public Base 
{
public:
    DerivedOne(string message)
        :Base(message)
    {}
   // override print function                    
   void print() const 
   {
      cout << "DerivedOne\n";
   } // end function print
}; // end DerivedOne class
 
// class DerivedTwo definition
class DerivedTwo : virtual public Base 
{
public:
    DerivedTwo(string message)
        :Base(message)
    {}
    
   // override print function                    
   void print() const 
   {
      cout << "DerivedTwo\n";
   } // end function print
}; // end DerivedTwo class
 
// class Multiple definition
class Multiple : public DerivedOne, public DerivedTwo 
{
public:
    Multiple(string message)
        :Base(message),DerivedOne(message), DerivedTwo(message)
    {}
   // qualify which version of function print
   void print() const                        
   {                                         
      DerivedTwo::print();                   
   } // end function print                   
}; // end Multiple class
 
int main()
{
    Multiple both("Multiple="); // instantiate Multiple object
    DerivedOne one("DerivedOne="); // instantiate DerivedOne object
    DerivedTwo two("DerivedTwo="); // instantiate DerivedTwo object
    
    // declare array of base-class pointers and initialize
    // each element to a derived-class type
    Base *array[ 3 ];
    array[ 0 ] = &both;
    array[ 1 ] = &one;
    array[ 2 ] = &two;
    
    // polymorphically invoke function print
    for ( int i = 0; i < 3; i++ )
        array[ i ]->print();
    
    return 0;
} // end main
 
Текущее время: 08:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru