C++ за 21 день седьмое издание



Download 1,38 Mb.
bet170/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   166   167   168   169   170   171   172   173   ...   437
Bog'liq
word1

class President




  1. {

i': private:



  1. закрытый стандартный конструктор (запрет создания извне)



В:President() {};



  1. закрытый конструктор копий (запрет создания копии) President(const Presidents);

lz



  1. // закрытый оператор присвоения (запрет присвоения)




  1. const Presidents operator=(const Presidents);

15

  1. // данные-члены: имя президента string Name;



13

public:


// контролируемое создание экземпляра static Presidents Getlnstance()

234 ЗАНЯТИЕ 9. Классы и объекты

2 2 :




2 3 :


2 4 :


2 5 :


2 6 :


2 7 :


2 8 :


2 9 :


3 0 :


3 1 :


3 2 :


3 3 :


3 4 :


3 5 :


3 6 :


3 7 :


3 8 :


3 9 :


4 0 :


4 1 :


4 2 :


4 3 :


4 4 :


4 5 :


4 6 :


4 7 :


4 8 :


4 9 :


5 0 :

{



  1. статические объекты создаются только однажды static President Onlylnstance;



return Onlylnstance;

}



  1. открытые методы string GetNameO



{


return Name;
}


void SetName(string InputName)

{
Name = InputName;


}


int main()

{
Presidents OnlyPresident = President::GetInstance(); OnlyPresident.SetName("Abraham Lincoln");





  1. чтобы увидеть, как отказ при компиляции запрещает




  1. дублирование, снимите комментарии со следующих строк



// President Second; // конструктор недоступен



  1. President* Third= new President О; // конструктор недоступен




  1. President Fourth = OnlyPresident; // конструктор копий




    1. недоступен




  1. OnlyPresident = President::GetInstance(); // оператор =




      1. недоступен



5 1 :
5 2 : cout « "The name of the President is: ";


5 3 : cout « President::GetInstance().GetName() « endl;


5 4 :
5 5 : return 0;


56: }


Результат


The name of the President is: Abraham Lincoln


Анализ

Обратите внимание на функцию m ain (): в ней всего несколько строк кода и ряд за­ комментированных строк, которые демонстрируют все комбинации создания новых эк­ земпляров или копий класса P r e s id e n t , которые не сработают. Давайте проанализируем их одна за другой:




4 7 : // President Second; // конструктор недоступен


4 8 : // President* Third= new President(); // конструктор недоступен

Различные способы использования конструкторов и деструкторов

235

Строки 47 и 48 — это попытки создания объекта в стеке и распределяемой памяти соответственно, с использованием стандартного конструктора, который недоступен, по­ скольку в строке 8 он объявлен закрытым.





    1. // President Fourth = OnlyPresident; // конструктор копий




      1. недоступен




  1. строке 49 предпринимается попытка создания копии существующего объекта при по-чощи конструктора копий (присвоение во время создания вызывает конструктор копий), готорый недоступен в функции m ain (), поскольку в строке 11 она объявлена закрытой.




    1. // OnlyPresident = President::GetInstance(); // оператор =




        1. недоступен

Строка 50 является попыткой создания копии через присвоение, которое не сработает, так как оператор присвоения объявлен закрытым в строке 14. Таким образом, функция - a in () никак не может создать экземпляр класса P r e s id e n t , а единственная оставшая-:я возможность получить экземпляр класса P r e s i d e n t — это использовать статическую функцию G e tln s ta n c e (), как в строке 43. Поскольку функция G e tln s ta n c e () является статическим членом класса, она очень похожа на глобальную функцию, которая может 5ыть вызвана и без наличия объекта. Функция G e t l n s t a n c e (), реализованная в стро-iax 21 -27, использует статическую переменную O n ly ln s t a n c e для гарантии наличия одного и только одного экземпляра класса P r e s id e n t . Дело в том, что код строки 24 вы ­


полняется только однажды (статическая инициализация), а следовательно, функция G e t­ ln s ta n c e () возвращает единственный доступный экземпляр класса P r e s id e n t , незави­ симо от того, как он используется (строки 43 и 53) в функции m ain ().







ВНИМАНИЕ!

Используйте шаблон синглетон (singleton pattern) только там, где это абсолют­ но необходимо, учитывайте будущий рост приложения и его возможностей. Обратите внимание на то, что ограничение создания нескольких экземпляров может стать узким местом архитектуры, когда впоследствии понадобится не­ сколько экземпляров класса.



Например, если наш проект перерастет от моделирования одной нации к Организации Объединенных Наций, которая в настоящее время насчитывает 192 нации с 192 президентами, проблема архитектуры становится очевидной.




Download 1,38 Mb.

Do'stlaringiz bilan baham:
1   ...   166   167   168   169   170   171   172   173   ...   437




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish