|
|
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
1) чем в памяти определяется размер объекта класса? (размерами методов и атрибутов или чем то одним или вообще от этого не зависит?) 2) атрибуты класса могут быть любыми встроенными типами или любыми типами определенными в программе? 3) class A {int x; double y;} как для него сделать операцию сложения (ну там типа const A& operator+(A a) или както иначе??? заранее спасибо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 07:50 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
Тихомиров А.заранее спасибо!!!Заранее пожалуйста. А все три ответа есть в любой книжке по С++ Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 07:52 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
приятно иметь дело с добрыми людьми! на 3-ий вопрос я действительно нашел ответ, а на первые два не нашел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 07:58 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
Тихомиров А. ТА> приятно иметь дело с добрыми людьми! на 3-ий вопрос я ТА> действительно нашел ответ, а на первые два не нашелА компилятор под рукой есть ? Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 07:59 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
Тихомиров А.1) чем в памяти определяется размер объекта класса? (размерами методов и атрибутов или чем то одним или вообще от этого не зависит?)Вот есть к примеру класс AnsiString. Сколько памяти занимает объект этого класса ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 08:02 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
не знаю. ф-ей SizeOf можно определить (прогр. оболочки под рукой нету). ну на скока я понимаю от методов размер объекта не зависит, следовательно он зависит от атрибутов... или вообще не от чего не зависит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 08:27 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
а на второй вопрос мне кажется атрибут можно сделать любого типа, который существует в программе. я прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 08:29 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
Тихомиров А.а на второй вопрос мне кажется атрибут можно сделать любого типа, который существует в программе. я прав? Невнимательно книжку читал :). Атрибут в С++ есть переменная-член, которая может иметь тип любого известного типа. "Известный" означает что тип должен быть ранее объявлен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 08:42 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
теперь на счет первого вопроса. раз виртуальные ф-ии увеличивают размер объекта => размер объекта зависит от методов и атрибутов. я прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 08:43 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
А. КАтрибут в С++ есть переменная-член, которая может иметь тип любого известного типа. "Известный" означает что тип должен быть ранее объявлен. так я же могу придумать свой тип и объявить его заранее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 08:46 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
Тихомиров А. ТА> теперь на счет первого вопроса. раз виртуальные ф-ии ТА> увеличивают размер объекта => размер объекта зависит от ТА> методов и атрибутов. я прав?Близко к истине, но ... в конструкторе объекта могут создаваться некие объекты в памяти, и никакой sizeof тебе не скажет по них Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 08:57 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
тогда кроме методов и атрибутов от чего ещё зависит размер объекта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 09:06 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
Тихомиров А. ТА> тогда кроме методов и атрибутов от чего ещё зависит ТА> размер объекта?От того, сколько памяти выделяется в конструкторе или в других методах ... вобще - размер объекта - это очень размытое понятие Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 09:24 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
это есть такой тест, ответив на который например так: 1. Атрибуты класса могут быть только целыми числами любыми встроенными типами (!) любого определенного в программе типа 2. Если имеется код class A { public: int a; }; A *obj; как обратиться к переменной a? obj.a obj-a obj->a (!) obj::a 3. Какое из приведенных ниже определений операции сложения для класса class A {int x; double y;} является наиболее правильным? void operator+ (const A& a) const const A& operator+(A a) A operator+(const A& a) const (!) const A& operator(const A& a) 4. Сколько ошибок обнаружит компилятор в следующем коде? class Ping { public: Ping() const {}; Ping(int _x) { x = _x; }; int SetX(int _x) const { x = _x; }; const int GetX(int _x) const { return x; }; private: int x; }; 1 (!) 2 3 4 5 5. Фрагмент программы for(i=n-1; i>=0; i--) for(j=0; j<n-i-1; j++) a [j]=1; заполнит элементы квадратной матрицы (n-размерность матрицы) на главной диагонали над главной диагональю над побочной диагональю (!) на побочной диагонали под побочной диагональю 6. Размер объекта класса в памяти определяется суммой размеров методов класса и атрибутов класса (!) суммой размеров методов класса суммой размеров атрибутов класса не зависит от размеров атрибутов и методов класса выдаст - тест не пройден! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 09:41 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
шрифт поменялся. ну короче так: это есть такой тест, ответив на который например так: 1. Атрибуты класса могут быть только целыми числами любыми встроенными типами (!) любого определенного в программе типа 2. Если имеется код class A { public: int a; }; A *obj; как обратиться к переменной a? obj.a obj-a obj->a (!) obj::a 3. Какое из приведенных ниже определений операции сложения для класса class A {int x; double y;} является наиболее правильным? void operator+ (const A& a) const const A& operator+(A a) A operator+(const A& a) const (!) const A& operator(const A& a) 4. Сколько ошибок обнаружит компилятор в следующем коде? class Ping { public: Ping() const {}; Ping(int _x) { x = _x; }; int SetX(int _x) const { x = _x; }; const int GetX(int _x) const { return x; }; private: int x; }; 1 (!) 2 3 4 5 5. Фрагмент программы Код: plaintext 1. 2. на главной диагонали над главной диагональю над побочной диагональю (!) на побочной диагонали под побочной диагональю 6. Размер объекта класса в памяти определяется суммой размеров методов класса и атрибутов класса (!) суммой размеров методов класса суммой размеров атрибутов класса не зависит от размеров атрибутов и методов класса выдаст - тест не пройден! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 09:43 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
дело не в тесте. Т.е. заранее определить размер объекта невозможно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 10:07 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
Тихомиров А.Т.е. заранее определить размер объекта невозможно?Если под размером объекта понимать всю память, которую выделили в конструкторе и в процессе работы - то в общем случае заранее нельзя. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 10:22 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
Хехе. Про размер могу только сказать, что может вообще ничего не занимать Вчерась вот эксперементировали. Класс содержит переменную типа int и функцию установки значения этой переменной. В программе создается объект класса, устанавливается значение равное "1" и printf оно выводится. Знаете что в результате?) push $1 push .string;"%d" которая call _printf :-) __________________ For more information, please proceed to http://www.ot-e.biz ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 10:38 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
hellПро размер могу только сказать, что может вообще ничего не занимать Не может, согласно стандарту С++. Объект должен обладать идентичностью, и, поскольку в С++ объект идентифицируется его адресом (указателем на него), то никакие два разных объекта не должны иметь одинаковый адрес, поэтому минимальный размер объекта - 1 байт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 11:05 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
1) чем в памяти определяется размер объекта класса? (размерами методов и атрибутов или чем то одним или вообще от этого не зависит?) Размером всех нестатических атрибутов класса, которые неупакованы в union-ы. Если они упакованы, то для каждого набора атрибутов, попадающих в один union выделяется максимальный размер из всех атрибутов. Плюс могут добавляться также накладные расходы, связанные с реализацией runtime-полиморфизма, как например, размер указателя на таблицу виртуальных функций. 2) атрибуты класса могут быть любыми встроенными типами или любыми типами определенными в программе? любыми типами определенными в программе, естественно. 3) class A {int x; double y;} как для него сделать операцию сложения (ну там типа const A& operator+(A a) или както иначе??? Обычно определяется так: A operator+(const A &right); Но operator + может быть также и не-member function , тогда A operator+(const A &left, const A &right); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 11:11 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
Тихомиров А.не знаю. ф-ей SizeOf можно определить (прогр. оболочки под рукой нету). size_of не функция, а операция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 11:12 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
Тихомиров А.теперь на счет первого вопроса. раз виртуальные ф-ии увеличивают размер объекта => размер объекта зависит от методов и атрибутов. я прав? Нет, не прав, потому как он увеличивает размер объекта на фиксированный кусок памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 11:13 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
Карабас БарабасБлизко к истине, но ... в конструкторе объекта могут создаваться некие объекты в памяти, и никакой sizeof тебе не скажет по них Эта память не входит в то, что называется размером объекта. Это входит в объем памяти, нужный для создания нового объекта данного класса, ее действительно нельзя никак узнать (по стандарту). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 11:15 |
|
||
|
3 вопроса
|
|||
|---|---|---|---|
|
#18+
Ggggguestшрифт поменялся. ну короче так: это есть такой тест, ответив на который например так: 1. Атрибуты класса могут быть только целыми числами любыми встроенными типами (!) любого определенного в программе типа 2. Если имеется код class A { public: int a; }; A *obj; как обратиться к переменной a? obj.a obj-a obj->a (!) obj::a 3. Какое из приведенных ниже определений операции сложения для класса class A {int x; double y;} является наиболее правильным? void operator+ (const A& a) const const A& operator+(A a) A operator+(const A& a) const (!) const A& operator(const A& a) 4. Сколько ошибок обнаружит компилятор в следующем коде? class Ping { public: Ping() const {}; Ping(int _x) { x = _x; }; int SetX(int _x) const { x = _x; }; const int GetX(int _x) const { return x; }; private: int x; }; 1 (!) 2 3 4 5 5. Фрагмент программы Код: plaintext 1. 2. на главной диагонали над главной диагональю над побочной диагональю (!) на побочной диагонали под побочной диагональю 6. Размер объекта класса в памяти определяется суммой размеров методов класса и атрибутов класса (!) суммой размеров методов класса суммой размеров атрибутов класса не зависит от размеров атрибутов и методов класса выдаст - тест не пройден! Для четвертого вопроса на мой взгляд ответ 3. Компилятор должен выдать 3 ошибки в строке: int SetX(int _x) const { x = _x; }; Во первых константый метод пытается изменить внутреннюю переменную, а во вторый он обязательно должен выдавать значение. Также по моему будет ошибка на лишние ; за фигурной скобкой. Насчет того, чем определяется размер объекта в памяти класса. У Джеса Либерти ясно написано, что размер объекта (именно объекта, а не таблицы виртуальных функции и т.д.) опредяелсяет только по размеру атрибутов класса. Причем если объявлен указатель на какой либо другой объект, то именно указаль является его атрибутом и его размер будет учитываться, а не размер объекта, на который ссылается данный указатель член. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2006, 11:22 |
|
||
|
|

start [/forum/topic.php?fid=57&startmsg=33731411&tid=2031257]: |
0ms |
get settings: |
6ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 371ms |

| 0 / 0 |
