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



Download 1,38 Mb.
bet155/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   151   152   153   154   155   156   157   158   ...   437
Bog'liq
word1

#include




    1. #include




    1. using namespace std;



3:



  1. class Human




  1. {




  1. private:




  1. // Закрытые данные-члены:




  1. string Name;




  1. int Age;

  2. :




    1. public:




    1. // конструктор




    1. Human()




    1. {




    1. Age =0; // инициализация гарантирует отсутствие




      1. случайного значения



16: cout « "Default constructor creates an instance of Human"



  1. endl;




  1. }








  1. // перегруженный конструктор, получающий Name




  1. Human(string HumansName)



21: {

  1. Name = HumansName;




  1. Age =0; // инициализация гарантирует отсутствие




    1. случайного значения




  1. cout « "Overloaded constructor creates " « Name « endl;




  1. }

Конструкторы 215
1‘: // перегруженный конструктор, получающий Name и Аде



  1. Human(string HumansName, int HumansAge)

12: {




2:: Name = HumansName;



  1. Age = HumansAge;




  1. cout « "Overloaded constructor creates ";



22: cout « Name « " of " « Age « " years" « endl;

  1. }




  1. void SetName (string HumansName)

{


  1. Name = HumansName;



22:}



  1. void SetAge(int HumansAge)




  1. {

  2. Age = HumansAge;




  1. }




  1. void IntroduceSelf()

4~:{


  1. cout « "I am " + Name « " and am ";




  1. cout « Age « " years old" « endl;

:3:}




  1. int main ()




  1. {



Human FirstMan; // использование стандартного конструктора


FirstMan.SetName ("Adam");•


FirstMan.SetAge(30);
53



  1. Human FirstWoman ("Eve"); // использование перегруженного




    1. конструктора




  1. FirstWoman.SetAge (28);



61



  1. Human FirstChild ("Rose", 1);








  1. FirstMan.IntroduceSelf() ;




  1. FirstWoman.IntroduceSelf();




  1. FirstChild.IntroduceSelf();

Результат


Default constructor creates an instance of Human


Overloaded constructor creates Eve


Overloaded constructor creates Rose of 1 years


I am Adam and am 30 years old


I am Eve and am 28 years old


I am Rose and am 1 years old
216 ЗАНЯТИЕ 9. Классы и объекты


Анализ

Адам создается с использованием стандартного конструктора; Ева — с использова­ нием перегруженного конструктора, который в виде параметра принимает строку, при­ сваиваемую переменной-члену Human: : Name, тогда как Роза создается с использовани­ ем третьего перегруженного конструктора, получающего в качестве параметров строку и число, присваиваемое переменной-члену Human: : Age. Эта программа демонстрирует, что перегрузка конструкторов может оказаться весьма полезной, помогая инициализировать переменные.


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



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




  1. И СТИ Н Г 9.5 . Класс с перегруженным конструктором, но без стандартного конструктора




    1. #include




    1. #include




    1. using namespace std;



3:



  1. class Human




  1. {




  1. private:




  1. // Закрытые данные-члены:




  1. string Name;




  1. int Age;

1 0 :



  1. public:



1 2 :



  1. // перегруженный конструктор (без стандартного конструктора)




  1. Human(string HumansName, int HumansAge)




  1. {




  1. Name = HumansName;




  1. Age = HumansAge;




  1. cout << "Overloaded constructor creates " « Name;



19: cout « " of age " « Age « endl;
20: }
2 1 :



  1. void IntroduceSelf()




  1. {




  1. cout << "I am " + Name « " and am ";




  1. cout « Age « " years old" « endl;




  1. }




  1. };



28


29 int main()
Конструкторы 217
I-1: // Закомментирована следующая строка, пытающаяся создать объект



  1. с использованием стандартного конструктора



;1:// Human FirstMan;


:4: Human FirstMan("Adam", 30);


Human FirstWoman("Eve", 28);


FirstMan.IntroduceSelf();



  1. FirstWoman.IntroduceSelf();

}


Результат


Overloaded constructor creates Adam of age 30


Overloaded constructor creates Eve of age 28


I am Adam and am 30 years old


I am Eve and am 28 years old


Анализ

Строка 32 в функции m a in () заслуживает внимания. Она очень похожа на код, соз­ дающий объект F ir s t M a n , в листинге 9.3, но если снять с нее комментарий, компиляция дотерпит неудачу с сообщением e r r o r : 'H u m an ' : no a p p r o p r ia t e d e f a u lt c o n ­


s t r u c t o r a v a i l a b l e (ошибка: 'H u m an ' : нет подходящего стандартного конструктора).


Дело в том, что у этой версии класса Human есть только один конструктор, получающий входные параметры типа s t r i n g и i n t , как можно заметить в строке 14. Никакого стан­ дартного конструктора нет, а при наличии перегруженного конструктора компилятор C++ не предоставляет стандартный конструктор автоматически.


Таким образом, этот пример демонстрирует возможность разработки классов, объекты которых можно создать, только предоставив определенные параметры, в данном случае Name и А де . Пример в листинге 9.5 демонстрирует также возможность присвоения зна­ чения переменной члену Name при создании объекта класса Human и невозможность из­ менить его впоследствии. Дело в том, что класс Human хранит атрибут имени в закрытой


переменной типа s t r i n g по имени Name, к которой нельзя обратиться или модифициро­ вать из функции m a in () или любого другого места, кроме как из класса Human. Другими

словами, перегруженный конструктор вынуждает пользователя класса Human определить имя (и возраст) для каждого создаваемого объекта и не позволяет изменять это имя, — весьма неплохая модель реального положения вещей, не так ли? Имя вам родители дали при рождении; людям разрешено знать его, но ни у кого (кроме вас) нет права изменить его.



Download 1,38 Mb.

Do'stlaringiz bilan baham:
1   ...   151   152   153   154   155   156   157   158   ...   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