Порядок вызова ф

190
24 февраля 2018, 22:00

Друзья, подскажите, какая последовательность выполнения кода, что вызыватся, куда копируется и тд.

   class A {
   public:
    char*data;
   A(const char* msg = 0): data(new char[msg ? strlen(msg):0 +1]) 
    {
      if(msg)
      {
          memcpy(data,msg,strlen(msg));
      }
    }
   ~A() 
    {
       delete data;
    }
    virtual void say() 
      {
        std::cout << "A::say" << data << std::endl;
      }
    };
    class B: public A {
    public:
    int*data;
    B():A(),data(new int(0)) {}
    ~B() 
    {
      delete data;
    }
    virtual void say() 
    {
        std::cout << "B::say:" << *data <<std::endl;
    }
    };
    int main (){
    A *a = new A("hello");
    A *b = new B();
    a->say();
    *b=*a;
    b->say();
    }
    вывод
    A::sayhello¤¤¤¤лллллллл■ю■ю■ю■
    B::say:0
Answer 1

Вы хотите что-нибудь в таком духе? (Поскольку здесь нет вопроса про ошибки и почему так .)

1) Конструктор А (msg = "hello"). Где data = "¤¤¤¤лллллллл■ю■ю■ю■"
2) memcpy: data = "hello¤¤¤¤лллллллл■ю■ю■ю■".
3) Вызывается конструктор Б (data = undefined).
4) Обратно к конструктору А (msg = NULL) . data = <Error reading characters of string.>
5) Конструктор Б. data = (???) -> data = (int) 0
6) a->say(); -> функция say() в классе А.
7) *a = "hello¤¤¤¤лллллллл■ю■ю■ю■"
8) *b = {0}
9) b->say(); -> функция say() в классе Б
10) Наконец system("pause");

READ ALSO
Чтение из файла string с пробелом

Чтение из файла string с пробелом

Как считать string с пробелом из файла?

198
Map и регулярные выражения

Map и регулярные выражения

Ошибка добавления в map при использовании библиотеки regex, кто подскажет что и с чем это едят? и как исправить?

199
Что за зверь - Allocator?

Что за зверь - Allocator?

Прошу, помогите с пониманием аллокаторов в c++

260
Извлечение строки из адреса

Извлечение строки из адреса

Есть ли программный способ (C/C++ или ассемблер) извлечь строку кода из адреса во время работы программы? Что-то вроде команды disassemble [Address] в gdb

260