2015-04-03 2 views
3

Пусть A - базовый класс и B - это общедоступный класс.Нарезка против набегающих :: Насколько я понимаю?

B b; 

нарезка:

A a = b; 

Приведение к базовому типу:

A* p = &b; // p is a pointer variable of type A 
A& r = b; // r is a reference variable of type A 

Правильно ли это? Пожалуйста, поделитесь аналогичными примерами, чтобы проиллюстрировать эти две концепции, если это возможно.

+2

'p' - указательная переменная типа * указатель на' A' *. –

+2

Тип переменной 'r' является * ссылкой на' A' *, однако тип выражения 'r' равен' A'. Очистить? :) –

ответ

1

Да!

Объектная сортировка происходит, когда объекту производного класса присваивается объект базового класса, дополнительные атрибуты объекта производного класса отсекаются, чтобы сформировать объект базового класса.

Так что да, если у вас есть базовый класс

class A{ 
    public: 
    int x; 
    char y; 
}; 

и класс B, производный публично от А с некоторыми дополнительными членами данных,

class B:public A{ 
    public: 
    int z; 
}; 

делает A a = b; будет отрезают «г» ,

Upcasting - преобразование указателя или ссылки типа производного класса в указатель или ссылку типа базового класса, идущего вверх в дереве наследования.

B objB; 
A *objA = &objB; 

Просто, чтобы принести больше света на эту тему, вы можете преобразовать указатель базового класса (ссылка) на указатель производного класса (ссылка) .Это называется понижающее приведение (напротив приведения к базовому типу).

B *objB = (B *) &A;

Но нет никакого способа, вы можете назначить объект базового класса для объекта производного класса.

Приветствия!

Смежные вопросы