Друзья, подскажите, какая последовательность выполнения кода, что вызыватся, куда копируется и тд.
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
Вы хотите что-нибудь в таком духе? (Поскольку здесь нет вопроса про ошибки и почему так .)
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");
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости