powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / 3 вопроса
25 сообщений из 46, страница 1 из 2
3 вопроса
    #33731411
1) чем в памяти определяется размер объекта класса? (размерами методов и атрибутов или чем то одним или вообще от этого не зависит?)

2) атрибуты класса могут быть любыми встроенными типами или любыми типами определенными в программе?

3) class A {int x; double y;} как для него сделать операцию сложения (ну там типа const A& operator+(A a) или както иначе???

заранее спасибо!!!
...
Рейтинг: 0 / 0
3 вопроса
    #33731416
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тихомиров А.заранее спасибо!!!Заранее пожалуйста.
А все три ответа есть в любой книжке по С++
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
3 вопроса
    #33731422
приятно иметь дело с добрыми людьми! на 3-ий вопрос я действительно нашел ответ, а на первые два не нашел
...
Рейтинг: 0 / 0
3 вопроса
    #33731424
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тихомиров А.
ТА> приятно иметь дело с добрыми людьми! на 3-ий вопрос я
ТА> действительно нашел ответ, а на первые два не нашелА компилятор под рукой есть ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
3 вопроса
    #33731432
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тихомиров А.1) чем в памяти определяется размер объекта класса? (размерами методов и атрибутов или чем то одним или вообще от этого не зависит?)Вот есть к примеру класс AnsiString. Сколько памяти занимает объект этого класса ?
...
Рейтинг: 0 / 0
3 вопроса
    #33731471
не знаю. ф-ей SizeOf можно определить (прогр. оболочки под рукой нету). ну на скока я понимаю от методов размер объекта не зависит, следовательно он зависит от атрибутов... или вообще не от чего не зависит?
...
Рейтинг: 0 / 0
3 вопроса
    #33731478
а на второй вопрос мне кажется атрибут можно сделать любого типа, который существует в программе. я прав?
...
Рейтинг: 0 / 0
3 вопроса
    #33731498
А. К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тихомиров А.а на второй вопрос мне кажется атрибут можно сделать любого типа, который существует в программе. я прав?

Невнимательно книжку читал :).
Атрибут в С++ есть переменная-член, которая может иметь тип любого известного типа. "Известный" означает что тип должен быть ранее объявлен.
...
Рейтинг: 0 / 0
3 вопроса
    #33731501
теперь на счет первого вопроса. раз виртуальные ф-ии увеличивают размер объекта => размер объекта зависит от методов и атрибутов. я прав?
...
Рейтинг: 0 / 0
3 вопроса
    #33731509
А. КАтрибут в С++ есть переменная-член, которая может иметь тип любого известного типа. "Известный" означает что тип должен быть ранее объявлен. так я же могу придумать свой тип и объявить его заранее
...
Рейтинг: 0 / 0
3 вопроса
    #33731530
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тихомиров А.
ТА> теперь на счет первого вопроса. раз виртуальные ф-ии
ТА> увеличивают размер объекта => размер объекта зависит от
ТА> методов и атрибутов. я прав?Близко к истине, но ... в конструкторе объекта могут создаваться некие объекты в памяти, и никакой sizeof тебе не скажет по них
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
3 вопроса
    #33731548
тогда кроме методов и атрибутов от чего ещё зависит размер объекта?
...
Рейтинг: 0 / 0
3 вопроса
    #33731590
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тихомиров А.
ТА> тогда кроме методов и атрибутов от чего ещё зависит
ТА> размер объекта?От того, сколько памяти выделяется в конструкторе или в других методах ... вобще - размер объекта - это очень размытое понятие
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
3 вопроса
    #33731633
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. Фрагмент программы
for(i=n-1; i>=0; i--)
for(j=0; j<n-i-1; j++)
a [j]=1;
заполнит элементы квадратной матрицы (n-размерность матрицы)
на главной диагонали
над главной диагональю
над побочной диагональю (!)
на побочной диагонали
под побочной диагональю
6.
Размер объекта класса в памяти определяется
суммой размеров методов класса и атрибутов класса (!)
суммой размеров методов класса
суммой размеров атрибутов класса
не зависит от размеров атрибутов и методов класса

выдаст - тест не пройден!
...
Рейтинг: 0 / 0
3 вопроса
    #33731644
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.
for(i=n- 1 ; i>= 0 ; i--)
for(j= 0 ; j<n-i- 1 ; j++)
a[j]= 1 ;
заполнит элементы квадратной матрицы (n-размерность матрицы)
на главной диагонали
над главной диагональю
над побочной диагональю (!)
на побочной диагонали
под побочной диагональю
6.
Размер объекта класса в памяти определяется
суммой размеров методов класса и атрибутов класса (!)
суммой размеров методов класса
суммой размеров атрибутов класса
не зависит от размеров атрибутов и методов класса

выдаст - тест не пройден!
...
Рейтинг: 0 / 0
3 вопроса
    #33731699
дело не в тесте.
Т.е. заранее определить размер объекта невозможно?
...
Рейтинг: 0 / 0
3 вопроса
    #33731742
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тихомиров А.Т.е. заранее определить размер объекта невозможно?Если под размером объекта понимать всю память, которую выделили в конструкторе и в процессе работы - то в общем случае заранее нельзя.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
3 вопроса
    #33731782
Фотография hell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хехе.

Про размер могу только сказать, что может вообще ничего не занимать

Вчерась вот эксперементировали. Класс содержит переменную типа int и функцию установки значения этой переменной.

В программе создается объект класса, устанавливается значение равное "1"
и printf оно выводится.

Знаете что в результате?)

push $1
push .string;"%d" которая
call _printf

:-)

__________________
For more information, please proceed to http://www.ot-e.biz
...
Рейтинг: 0 / 0
3 вопроса
    #33731857
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hellПро размер могу только сказать, что может вообще ничего не занимать

Не может, согласно стандарту С++. Объект должен обладать идентичностью, и, поскольку в С++ объект идентифицируется его адресом (указателем на него), то никакие два разных объекта не должны иметь одинаковый адрес, поэтому минимальный размер объекта - 1 байт.
...
Рейтинг: 0 / 0
3 вопроса
    #33731885
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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);
...
Рейтинг: 0 / 0
3 вопроса
    #33731887
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тихомиров А.не знаю. ф-ей SizeOf можно определить (прогр. оболочки под рукой нету).

size_of не функция, а операция.
...
Рейтинг: 0 / 0
3 вопроса
    #33731895
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тихомиров А.теперь на счет первого вопроса. раз виртуальные ф-ии увеличивают размер объекта => размер объекта зависит от методов и атрибутов. я прав?

Нет, не прав, потому как он увеличивает размер объекта на фиксированный кусок памяти.
...
Рейтинг: 0 / 0
3 вопроса
    #33731908
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карабас БарабасБлизко к истине, но ... в конструкторе объекта могут создаваться некие объекты в памяти, и никакой sizeof тебе не скажет по них


Эта память не входит в то, что называется размером объекта. Это входит в объем памяти, нужный для создания нового объекта данного класса, ее действительно нельзя никак узнать (по стандарту).
...
Рейтинг: 0 / 0
3 вопроса
    #33731937
Homosum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
for(i=n- 1 ; i>= 0 ; i--)
for(j= 0 ; j<n-i- 1 ; j++)
a[j]= 1 ;
заполнит элементы квадратной матрицы (n-размерность матрицы)
на главной диагонали
над главной диагональю
над побочной диагональю (!)
на побочной диагонали
под побочной диагональю
6.
Размер объекта класса в памяти определяется
суммой размеров методов класса и атрибутов класса (!)
суммой размеров методов класса
суммой размеров атрибутов класса
не зависит от размеров атрибутов и методов класса

выдаст - тест не пройден!


Для четвертого вопроса на мой взгляд ответ 3. Компилятор должен выдать 3 ошибки в строке:
int SetX(int _x) const { x = _x; };

Во первых константый метод пытается изменить внутреннюю переменную, а во вторый он обязательно должен выдавать значение. Также по моему будет ошибка на лишние ; за фигурной скобкой.

Насчет того, чем определяется размер объекта в памяти класса. У Джеса Либерти ясно написано, что размер объекта (именно объекта, а не таблицы виртуальных функции и т.д.) опредяелсяет только по размеру атрибутов класса. Причем если объявлен указатель на какой либо другой объект, то именно указаль является его атрибутом и его размер будет учитываться, а не размер объекта, на который ссылается данный указатель член.
...
Рейтинг: 0 / 0
3 вопроса
    #33731947
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
M> Эта память не входит в то, что называется размером
M> объектаТ.е. размер объекта - это сколько памяти отвел компилятор для него, так получается
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
25 сообщений из 46, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / 3 вопроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]