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

Собеседования по С++ для джуна - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Необязательные временные объекты http://www.cyberforum.ru/cpp-beginners/thread1506633.html
Помогите с задачкой: Класс Car содержит модель автомобиля. Функция Find определяет, присутствует ли указанная модель в списке автомобилей. class Car { string model_; public: Car(string mod) :model_(mod){} bool operator==(const Car& other) {
C++ Уведомления между потоками Здравствуйте! Набросал код для экспериментов: #include "stdafx.h" int блок_1(HWND *hWnd, MyStruct* strukt_1); int сервис_1(HWND *hWnd, MyStruct* strukt_1); void блок(HWND *hWnd, MyStruct* strukt_1)//запускаем основной поток { int q = 0; http://www.cyberforum.ru/cpp-beginners/thread1506588.html
C++ Когда в ОС используется COM ?
Для каких действий ОС использует COM технологию ? Всегда ли она используется при исполнении exe файлов?
C++ Где найти все глаголы для ShellExecute ?
Здравствуйте. Где и как посмотреть список допустимых глаголов системы? Знаю о существовании страницы в msdn , но функция которую я нашел в интернете и использую использует глагол "runas", которого нет на странице.
C++ Write some short C or C++ code to generate a segmentation fault http://www.cyberforum.ru/cpp-beginners/thread1506555.html
Write some short C or C++ code to generate a segmentation fault
C++ Write some short C or C++ code to generate a stack overflow Write some short C or C++ code to generate a stack overflow подробнее

Показать сообщение отдельно
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
03.08.2015, 12:55     Собеседования по С++ для джуна
hoggy, думаю я понял ход вашей мысли.
Размер отдельного объекта не может быть нуль. Так? С этим я согласен.
Но рассмотрим такой пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
struct A {};
struct B : A {
    int x;
};
void func(const A& a) {
    std::endl(std::cout);
    std::cout << "sizeof(a) is " << sizeof(a);
    std::endl(std::cout);
    std::cout << "adress a is " << &a;
}
int main(){
    B b;
    std::cout << "sizeof(b) is " << sizeof(b);
    std::endl(std::cout);
    std::cout << "sizeof(b.x) is " << sizeof(b.x);
    func(b);
    std::endl(std::cout);
    std::cout << "adress b is " << &b;
    std::endl(std::cout);
    std::cout << "adress b.x is " << &b.x;
    return 0;
}
Передача в функцию происходит по ссылке, т.е. мы передаем существующий объект без создания временного.
Как легко видеть адреса не изменились, однако sizeof(a) вернул 1. Вопрос: если как вы говорите объект не может иметь нулевой размер то откуда в структуре взялся лишний байт?
Цитата Сообщение от hoggy Посмотреть сообщение
"часть базового класса" - не является ни объектом, ни структурой.
это не более, чем абстракция в вашей голове.
А как же приведенный пример? С чем же мы тогда работаем в теле функции если повторюсь передача происходит по ссылке?
Действительно производный класс слагается не только из базовых. В нем может быть кое-что еще начиная от выравнивания завершая таблицей виртуальных функций. Однако в производном классе обязательно присутствует бинарно совместимая часть соответствующая базовому классу. И работать с этой частью структуры можно как с объектом базового класса включая обращение к полям класса и вызовом функций членов. А если так, то почему вы утверждаете, что в наследнике нет объекта базового класса. Чем докажите?

Добавлено через 17 минут
Более того. Согласно основному принципу С++ объект существует после того как отработает его конструктор. При построении объекта производного класса отрабатывают конструкторы базового. Следовательно объект базового класса существует.
 
Текущее время: 14:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru