Студопедия — Укажите способы доступа к полям и методам класса
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Укажите способы доступа к полям и методам класса






. - позволяет ссылке на объект получить доступ к полю структуры (класса).

Пример:
struct strct{
int info;
};
void main(){
strct x;
x.info=7;
}

->; - позволяет ссылке на объект получить доступ к полю структуры (класса).
struct strct{
int info;
};
void main(){
strct *x=new strct;
x->info=7;
}

94. Зачем нужны методы с модификатором const? и как они используются.

Когда метод не изменяет поля объекта, для которого он вызван, желательно в конце написать const

void func () const { …}

пример из перегрузки операторов:

inline Chislo Chislo::operator + (const Chislo & c) const

{

Chislo m;

m.mi = mi + c.mi;

m.ma = ma + c.ma;

return m;}

95. Как определить константный объект? Какие методы доступа применимы к нему?

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

int main()

{ const MyClass obj;

… }

96. Какой параметр скрыто передается методу класса? Опишите использование ключевого слова this.

Функции-члены класса (за исключением статических) получают в дополнение к списку параметров еще и неявный указатель this - адрес "своего" объекта, того, с которым они вызваны и поля которого они должны обрабатывать.

Ключевое слово "this" представляет собой указатель на текущий объект класса. Методы класса могут использовать ключевое слово this чтобы получить указатель на объект для которого вызван данный метод. Указатель this представляет собой постоянную величину, мы не можем изменять его значение в своей программе.

class my

{ int a;

public:

my(могут быть параметры); //конструктор- без типа, совпадает с именем класса

void b() { this->a=0; }

};

 

97. Можно ли построить класс без конструктора? Как в этом случае описать объекты класса?

Если в классе не определить конструктор (хотя бы один), тогда компилятор создаст конструктор по умолчанию. Можно будет дать возможность пользователю изменять переменные самостоятельно, или же определить функции, которые будут изменять значения переменных.

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

98. Когда вызывается конструктор? Наследуется ли конструктор? Укажите синтаксис списка инициализаций при вызове конструктора. Можно ли определить конструктор в закрытой секции? Можно ли явно вызвать конструктор?

Конструктор вызывается в момент создания объекта. Конструктор не наследуется.

class my

{ const int a,b,c;

public:

my(могут быть параметры): a(5),b(3),c(4){};

};

Определить конструктор в закрытой части можно. Оно компилится. Вот тока ни один объект создать не получится.

Нет, вызвать явно конструктор нельзя.

 

99. Определите понятие «дружественная функция».

Это функция, которая не является методом класса, но имеет доступ к его закрытой части. Дружественная функция может обращаться ко всем его элементам, включая private и protect. Одна и та же функция может быть дружественной для двух или более классов.

class point

{public:

friend void point::Clear(point*); // Функция Clear объявляется дружественной классу point

private:

int m_x;

int m_y; };

void Clear(point* ptrPoint) // Функция Clear

{ ptrPoint->m_x = 0; // Обращаемся к элементам класса, объявленным как private

ptrPoint->m_y = 0;

return;}

void main()// Главная функция

{ point pointTestPoint;

Clear(&pointTestPoint); // Вызываем дружественную функцию

}

100. Опишите синтаксис деструктора.Зачем виртуализировать деструктор? Можно ли наследовать деструктор?Можно ли явно вызвать деструктор?

class A

{

public:

~A();

}

 

A:: ~A() { …}

Деструктор тоже ничего не возвращает и имеет название, совпадающее с именем класса, но перед ним стоит ~. Деструктор всегда ничего не принимает. Когда имеется иерархия классов, невозможно точно определить, куда указывает указатель. И тогда операция delete не будет работать. Объявив деструктор виртуальным, мы гарантируем, что для каждого производного класса будет замещен деструктор и объект правильно удалится.

Пример:

 

class Base

{ public:

~Base() //невиртуальный деструктор

//virtual ~Base()// виртуальный дестркутор - закоментен

{ cout << “Base удален\n”; }

};

class Derv: public Base

{ public:

~Derv()

{ cout << “Derv удален\n”; }

};

int main()

{ Base* pBase = new Derv;

delete pBase;

return 0;

}

Результат программы: Base удален //результат ошибочен, к такому результату привело то, что деструктор базового класса в приведенном листинге не виртуальный. Исправить это можно, заккоментировав первую строчку определения дестркуктора и активизировать другую.

Результатом будет: Derv удален

Base удален

Наследовать деструктор нельзя. Явно вызвать деструктор вызвать …

101. Все ли операции могут быть перегружены? Можно ли перегрузить операции для базовых стандартных типов данных?

Следующие операции не могут быть перегружены:

  • операции доступа к членам структуры или класса (.)
  • операция разрешения (::)
  • операция условия (?:)
  • операция ->

Кроме того, нельзя создавать новые операции (например, нельзя определить новую операцию возведения в степень **, которая есть в некоторых языках) и пытаться их перегрузить; перегружать можно только существующие операции.

Для базовых стандартных типов тоже нельзя ничего перегрузить.

102. Зачем используют ключевое слово operator?

Для перегрузки операторов.

Сначала пишут возвращаемый тип, зачем ключевое слово operator, затем саму операцию (напр. ++) и наконец список аргументов, заключенных в скобки. Такой синтаксис говорит компилятору о том, что если операнд принадлежит классу, то нужно вызвать функцию с таким именем, встретив в тексте программы эту операцию. (пример: Chislo operator++();)







Дата добавления: 2015-04-19; просмотров: 730. Нарушение авторских прав; Мы поможем в написании вашей работы!



Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

ИГРЫ НА ТАКТИЛЬНОЕ ВЗАИМОДЕЙСТВИЕ Методические рекомендации по проведению игр на тактильное взаимодействие...

Реформы П.А.Столыпина Сегодня уже никто не сомневается в том, что экономическая политика П...

Виды нарушений опорно-двигательного аппарата у детей В общеупотребительном значении нарушение опорно-двигательного аппарата (ОДА) идентифицируется с нарушениями двигательных функций и определенными органическими поражениями (дефектами)...

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

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

Типовые ситуационные задачи. Задача 1. Больной К., 38 лет, шахтер по профессии, во время планового медицинского осмотра предъявил жалобы на появление одышки при значительной физической   Задача 1. Больной К., 38 лет, шахтер по профессии, во время планового медицинского осмотра предъявил жалобы на появление одышки при значительной физической нагрузке. Из медицинской книжки установлено, что он страдает врожденным пороком сердца....

Studopedia.info - Студопедия - 2014-2024 год . (0.013 сек.) русская версия | украинская версия