|
Программирование >> Инициализация объектов класса, структура
int main() правильно, но не лучшее решение Panda yin yang; yin yang.Bear::print( cout ); Предложенный способ неэффективен: теперь пользователь вынужден решать, каково правильное поведение класса Panda; однако лучше, если такого рода ответственность примет на себя проектировщик и класс Panda сам устранит все неоднозначности, свойственные его иерархии наследования. Простейший способ добиться этого - задать квалификацию уже в определении экземпляра в производном классе, указав тем самым inline void Panda::highlight() { Endangered::highlight(); inline ostreamS Panda::print( ostream Sos ) const { Bear::print( os ); Endangered::print( os ); return os; требуемое поведение: Поскольку успешная компиляция производного класса, наследующего нескольким базовым, не гарантирует отсутствия скрытых неоднозначностей, мы рекомендуем при тестировании вызывать все функции-члены, даже самые тривиальные. Упражнение 18.9 Дана следующая иерархия классов: class Basel { public: ... protected: int ival; double dval; char cval; ... private: int *id; ... class Base2 { public: ... protected: float fval; ... private: double dval; ... class Derived : public Basel { public: ... protected: string sval; double dval; class MI : public public: protected: Derived, public Base2 { int *ival; complex<double> cval; ... int ival; double dval; double void MI:: foo( double dval ) { int id; ... и структура функции-члена MI::foo() : (a) Какие члены видны в классе MI? Есть ли среди них такие, которые видны в нескольких базовых? (b) Какие члены видны в MI::foo() ? void MI:: bar() int sval; вопрос упражнения относится к коду, начинающемуся с этого места (a) dval = 3.14159; (d) fval = 0; (b) cval = a; (e) sval = *ival; присваиваний недопустимы внутри функции-члена MI::bar() : (c) id = 1; Упражнение 18.11 int id; void MI:: foobar( float cval ) int dval; вопросы упражнения относятся к коду, начинающемуся с этого места . Даны иерархия классов из упражнения 18.9 и скелет функции-члена MI:: f oobar(): (a) Присвойте локальной переменной dval сумму значений члена dval класса Base1 и члена dval класса Derived. (b) Присвойте вещественную часть члена cval класса MI члену fval класса Base2. (c) Присвойте значение члена cval класса Base1 первому символу члена sval класса Derived. Упражнение 18.12 Дана следующая иерархия классов, в которых имеются функции-члены print() : Упражнение 18.10 Пользуясь иерархией классов из упражнения 18.9, укажите, какие из следующих
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |