top 70 c interview questions
Најчешће постављана основна и напредна питања за Ц ++ интервјуе са примерима кода за почетнике, као и искусне професионалце:
Овај детаљан чланак сигурно ће бити обележивач онима који се припремају за Ц ++ интервју.
Готово све главне теме у Ц ++-у су овде обрађене, заједно са неким основним питањима о напредним темама као што је Стандард Темплате Либрари (СТЛ), итд.
Овај скуп питања о кодирању на Ц ++ помоћи ће вам да се суочите са било којим Ц ++ интервјуом и да га успешно очистите у првом покушају.
Шта ћете научити:
- Ц ++ питања за интервју са примерима кода
Ц ++ питања за интервју са примерима кода
У наставку су наведена најпопуларнија питања за програмски интервју за Ц ++ на која одговара стручњак за Ц ++.
Такође прочитајте => Најпопуларнија питања о интервјуу за програмирање Ц
Основни Ц ++
Структура програма Ц ++
П # 1) Која је основна структура програма Ц ++?
Одговор: Основна структура програма Ц ++ приказана је у наставку:
#include int main() { cout<<”Hello,World!”; return 0; }
Први ред који почиње са „ # ' је претпроцесорска директива . У овом случају користимо укључују као директиву која каже компајлеру да укључи заглавље док „ иостреам.х ”Који ће се користити за основни улаз / излаз касније у програму.
Следећи ред је „главна“ функција која враћа цео број. Главна функција је почетна тачка извршења било ког програма Ц ++. Без обзира на његов положај у датотеци изворног кода, садржај главне функције увек прво извршава компајлер Ц ++.
У следећем реду можемо видети отворене коврџаве заграде које означавају почетак блока кода. После овога, видимо упутства за програмирање или линију кода која користи цоунт који је стандардни излазни ток (његова дефиниција је присутна у иостреам.х).
Овај излазни ток узима низ знакова и штампа га на стандардни излазни уређај. У овом случају, то је „Здраво, свет!“. Имајте на уму да се свака наредба Ц ++ завршава тачком и зарезом (;), што је итекако потребно, а изостављање ће резултирати грешкама у компилацији.
Пре затварања заграда}, видећемо још један ред „ретурн 0;“. Ово је тачка повратка на главну функцију.
Сваки Ц ++ програм ће имати основну структуру као што је горе приказано са директивом претпроцесора, главном декларацијом функције праћеном блоком кода, а затим повратном тачком на главну функцију која указује на успешно извршавање програма.
П # 2) Који су коментари на Ц ++?
Одговор: Коментари на Ц ++-у су једноставно део изворног кода који је компајлер игнорисао. За програмера су корисни само ако додају опис или додатне информације о свом изворном коду.
У Ц ++ постоје два начина за додавање коментара:
- // једноредни коментар
- / * блокирај коментар * /
Први тип ће одбацити све након што компајлер наиђе на „//“. У другом типу, компајлер одбацује све између „/ *“ и „* /“.
Променљиве, типови података и константе
П # 3) Разлика између декларације и дефиниције променљиве.
Одговор: Декларација променљиве само специфицира тип података променљиве и име променљиве. Као резултат декларације, кажемо компајлеру да резервише простор за променљиву у меморији према наведеном типу података.
Пример:
int Result; char c; int a,b,c;
Све наведено су важеће изјаве. Такође имајте на уму да као резултат декларације вредност променљиве није одређена.
Док је дефиниција имплементација / инстанција декларисане променљиве где везујемо одговарајућу вредност за декларисану променљиву тако да ће повезивач моћи да повеже референце на одговарајуће ентитете.
Одозго Пример ,
Резултат = 10;
Ц = „А“;
То су важеће дефиниције.
П # 4) Коментар локалног и глобалног опсега променљиве.
Одговор: Опсег променљиве је дефинисан као опсег програмског кода унутар којег променљива остаје активна, тј. Може се декларисати, дефинисати или радити са њом.
У Ц ++ постоје две врсте опсега:
- Локални опсег: Каже се да променљива има локални опсег или је локална када је декларисана унутар блока кода. Променљива остаје активна само унутар блока и није јој доступна изван блока кода.
- Глобални опсег: Варијабла има глобални опсег када је доступна током целог програма. Глобална променљива је декларисана на врху програма пре свих дефиниција функције.
Пример:
#include Int globalResult=0; //global variable int main() { Int localVar = 10; //local variable. ….. }
П # 5) Који је приоритет када у програму постоје истоветна глобална и локална променљива?
Одговор: Кад год постоји локална променљива са истим именом као и глобална променљива, компајлер даје предност локалној променљивој.
Пример:
#include int globalVar = 2; int main() { int globalVar = 5; cout<Излаз горњег кода је 5. То је зато што, иако обе променљиве имају исто име, компајлер је дао предност локалном опсегу.
П # 6) Када постоје глобална променљива и локална променљива са истим именом, како ћете приступити глобалној променљивој?
Одговор: Када постоје две променљиве са истим именом, али различитим обимом, тј. Једна је локална, а друга глобална променљива, компајлер ће дати предност локалној променљивој.
Да бисмо приступили глобалној променљивој, користимо „ оператер резолуције опсега (: :) ”. Помоћу овог оператора можемо приступити вредности глобалне променљиве.
Пример:
#include int x= 10; int main() { int x= 2; cout<<”Global Variable x = “<<::x; cout<<”
local Variable x= “< Излаз:
Глобална променљива к = 10
локална променљива к = 2
П # 7) На колико начина постоји иницијализација инт са константом?
Одговор: Постоје два начина:
- Први формат користи традиционалну нотацију Ц.
инт резултат = 10; - Други формат користи нотацију конструктора.
инт резултат (10);
Константе
П # 8) Шта је константа? Објасните на примеру.
Одговор: Константа је израз који има фиксну вредност. Могу се поделити на константе целобројних, децималних, покретних зареза, знакова или низова, у зависности од њиховог типа података.
Поред децималне, Ц ++ такође подржава још две константе, тј. Окталну (до основе 8) и хексадецималну (до основе 16) константе.
Примери константи:
- 75 // цео број (децимални)
- 0113 // октал
- 0к4б // хексадецимално
- 3.142 // са покретном тачком
- ‘Ц’ // константа карактера
- „Хелло, Ворлд“ // стринг константа
Белешка: Када морамо да представимо један знак, користимо појединачне наводнике, а када желимо да дефинишемо константу са више знакова, користимо двоструке наводнике.
П # 9) Како дефинишете / декларишете константе у Ц ++?
Одговор: У Ц ++-у можемо да дефинишемо сопствене константе помоћу #дефинисати претпроцесорска директива.
#дефине Идентифиер валуе
Пример:
#include #define PI 3.142 int main () { float radius =5, area; area = PI * r * r; cout<<”Area of a Circle = “< Излаз: Површина круга = 78,55
Као што је приказано у горњем примеру, када једном дефинишемо константу помоћу #дефине директиве, можемо је користити у целом програму и заменити њену вредност.
Константе у Ц ++ можемо прогласити помоћу „ цонст ”Кључна реч. Овај начин је сличан начину декларисања променљиве, али са цонст префиксом.
Примери проглашења константе
цонст инт пи = 3.142;
цонст цхар ц = 'стх';
цонст поштански број = 411014;
У горњим примерима, кад год тип константе није наведен, Ц ++ преводилац подразумевано га поставља на целобројни тип.
Оператори
П # 10) Коментар оператора доделе у Ц ++.
Одговор: Оператор доделе у Ц ++ користи се за додељивање вредности другој променљивој.
а = 5;
Овај ред кода додељује целобројну вредност 5 до променљиве до .
Део лево од оператора = познат је као Вредност (лева вредност) и десна као рвалуе (права вредност). Л вредност увек мора бити променљива, док десна страна може бити константа, променљива, резултат операције или било која њихова комбинација.
Операција додељивања се увек одвија с десна на лево и никада обрнуто.
Једно својство које Ц ++ има над осталим програмским језицима је да се оператор додељивања може користити као рвалуе (или део рвалуе ) за други задатак.
Пример:
а = 2 + (б = 5);
је еквивалентно са:
б = 5;
а = 2 + б;
Што значи, прво доделите 5 до променљиве б а затим доделити до, вредност два плус резултат претходног израза б (то је 5), одлази до са коначном вредношћу од 7 .
Дакле, следећи израз такође важи у језику Ц ++:
а = б = ц = 5;
променљивим доделити 5 до , б и ц .
П # 11) Која је разлика између једнак (==) и Оператору доделе (=)?
Одговор: У језику Ц ++, једнако (==) и оператор додељивања (=) су два потпуно различита оператора.
Једнако са (==) је релациони оператор једнакости који процењује два израза да би утврдио да ли су једнаки и враћа труе ако су једнаки и фалсе ако нису.
Оператор доделе (=) користи се за додељивање вредности променљивој. Стога можемо имати сложену операцију додељивања унутар релационог оператора једнакости за процену.
П # 12) Који су различити аритметички оператори у Ц ++?
Одговор: Ц ++ подржава следеће аритметичке операторе:
- + додатак
- - одузимање
- * множење
- / подела
- % модул
Демонстрирајмо разне аритметичке операторе са следећим делом кода.
Пример:
#include int main () { int a=5, b=3; cout<<”a + b = “< Оутпут :
а + б = 8
а - б = 2
а * б = 15
а / б = 2
а% б = 1
Као што је горе приказано, све остале операције су једноставне и исте су као стварне аритметичке операције, осим модуларног оператора који се прилично разликује. Модуло оператор дели а и б, а резултат операције је остатак дељења.
П # 13) Који су различити сложени оператери доделе у Ц ++?
Одговор: Следе сложени оператери додељивања у Ц ++:
+ =, - =, * =, / =,% =, >> =,<<=, &=, ^=,|=
Сложени оператор додељивања једна је од најважнијих карактеристика језика Ц ++ која нам омогућава да променимо вредност променљиве са једним од основних оператора:
Пример:
value += increase; is equivalent to value = value + increase; if base_salary is a variable of type int. int base_salary = 1000; base_salary += 1000; #base_salary = base_salary + 1000 base_salary *= 5; #base_salary = base_salary * 5;
П # 14) Наведите разлику између операција повећања / смањења пре и после.
Одговор: Ц ++ дозвољава два оператора, тј. ++ (прираштај) и - (смањење), који вам омогућавају да додате 1 постојећој вредности променљиве и одузмете 1 од променљиве. Ови оператори се редом називају прираштај (++) и декремент (-).
Пример:
а = 5;
а ++;
Друга изјава, ++, довешће до тога да се 1 дода вредности а. Дакле, ++ је еквивалентан
а = а + 1; или
а + = 1;
Јединствена карактеристика ових оператора је та што тим оператерима можемо додати префикс или суфикс са променљивом. Дакле, ако је а променљива и префиксирамо оператор прираста, то ће бити
++ а;
То се назива Пре-инкремент. Слично томе, имамо и декремент.
Ако променљиву а префиксирамо оператором прираста, имаћемо,
а ++;
Ово је пост-прираштај. Исто тако, имамо и пост-декремент.
Разлика између значења пре и пост зависи од начина оцењивања израза и чувања резултата.
У случају оператора пре-повећања / смањења, прво се извршава операција повећања / смањења, а затим резултат прослеђује у вредност. Док се за операције после повећања / смањења, вредност л прво процењује, а затим се према томе врши повећање / смањење.
Пример:
а = 5; б = 6;
++ а; # а = 6
б–; # б = 6
–А; # а = 5
б ++; # 6
Улаз / излаз преко конзоле
П # 15) Који су оператери екстракције и уметања у Ц ++? Објасните примерима.
Одговор: У библиотеци иостреам.х на Ц ++, Кина , и трошак су два тока података који се користе за улаз и излаз. Цоут је обично усмерен на екран, а цин додељен тастатури.
„Цин“ (оператер екстракције): Коришћењем преоптерећеног оператора >> са цин стреам-ом, Ц ++ обрађује стандардни улаз.
int age; cin>>age;
Као што је приказано у горњем примеру, проглашава се целобројна променљива „старост“, а затим се чека да цин (тастатура) унесе податке. „Цин“ обрађује улаз само када се притисне тастер РЕТУРН.
„Цоут“ (оператор уметања): Ово се користи заједно са преоптерећеним<< operator. It directs the data that followed it into the cout stream.
Пример:
ит софтвер за управљање и алати за надзор
cout<<”Hello, World!”; cout<<123;
Контролне структуре и функције
Контролне структуре и петље
П # 16) Која је разлика између вхиле и до вхиле петље? Објасните примерима.
Одговор: Формат вхиле петље у Ц ++ је:
Док (израз)
{изјаве;}
Блок израза под вхиле се извршава све док је услов у датом изразу истинит.
Пример:
#include int main() { int n; cout<>n; while(n>0) { cout<<” “<У горе наведеном коду, петља ће директно изаћи ако је н 0. Дакле, у вхиле петљи је завршни услов на почетку петље и ако је испуњен, не извршавају се итерације петље.
Даље, размотрићемо петљу до-вхиле.
Општи формат радње је:
до {статемент;} вхиле (цондитион);
Пример:
#include int main() { int n; cout<>n; do { cout<У горњем коду можемо видети да се наредба унутар петље извршава најмање једном пошто је услов петље на крају. Ово су главне разлике између времена и времена рада.
У случају вхиле петље, можемо директно изаћи из петље на почетку, ако услов није испуњен, док у до-вхиле петљи извршавамо изјаве петље најмање једном.
Функције
П # 17) Шта подразумевате под типом повратка „воид“?
Одговор: Све функције треба да врате вредност према општој синтакси.
Међутим, у случају да ако не желимо да функција враћа било какву вредност, користимо „ празнина ”Да то укаже. То значи да користимо „ празнина 'Да означи да функција нема повратну вредност или враћа' празнина ”.
Пример:
void myfunc() { Cout<<”Hello,This is my function!!”; } int main() { myfunc(); return 0; }
П # 18) Објасните Пасс би Валуе и Пасс би Референце.
Одговор: Док прослеђујемо параметре функцији помоћу функције „Прођи вредност“, прослеђујемо копију параметара функцији.
Дакле, било какве модификације параметара у позваној функцији се не преносе натраг позивајућој функцији. Тако променљиве у позивајућој функцији остају непромењене.
Пример:
void printFunc(int a,int b,int c) { a *=2; b *=2; c *=2; } int main() { int x = 1,y=3,z=4; printFunc(x,y,z); cout<<”x = “< Излаз:
к = 1
и = 3
з = 4
Као што се види горе, иако су параметри промењени у позваној функцији, њихове вредности се нису одражавале у позивајућој функцији јер су прослеђиване по вредности.
Међутим, ако желимо да промењене вредности из функције вратимо натраг у функцију која позива, тада користимо технику „Прођи референцу“.
Да бисмо то демонстрирали, горенаведени програм модификујемо на следећи начин:
void printFunc(int& a,int& b,int& c) { a *=2; b *=2; c *=2; } int main() { int x = 1,y=3,z=4; printFunc(x,y,z); cout<<”x = “< Излаз:
к = 2
и = 6
з = 8
Као што је горе приказано, модификације извршене на параметрима позваних функција прослеђују се позивајућој функцији када користимо технику „Прођи референцу“. То је зато што помоћу ове технике не прослеђујемо копију параметара, већ заправо прослеђујемо саму референцу променљиве.
П # 19) Шта су задани параметри? Како се процењују у функцији Ц ++?
Одговор: Подразумевани параметар је вредност која се додељује сваком параметру током декларисања функције.
Ова вредност се користи ако тај параметар остане празан током позива функције. Да бисмо одредили подразумевану вредност за одређени параметар, једноставно додељујемо вредност параметру у декларацији функције.
Ако вредност није прослеђена за овај параметар током позива функције, тада преводилац користи задану подразумевану вредност. Ако је наведена вредност, тада се ступа на ову подразумевану вредност и користи се прослеђена вредност.
Пример:
int multiply(int a, int b=2) { int r; r = a * b; return r; } int main() { Cout< Излаз:
12
6
Као што је приказано у горњем коду, постоје два позива за функцију множења. У првом позиву са вредношћу се преноси само један параметар. У овом случају, други параметар је задата вредност. Али у другом позиву, како се прослеђују обе вредности параметра, подразумевана вредност се поништава и користи се прослеђена вредност.
П # 20) Шта је уграђена функција у Ц ++?
Одговор: Уграђена функција је функција коју компајлер компајлира као тачку позива функције и код се у тој тачки замењује код. Ово чини брже састављање. Ова функција је дефинисана додавањем префикса прототипа функције кључном речи „инлине“.
Такве функције су корисне само када је код уграђене функције мали и једноставан. Иако је функција дефинисана као Инлине, она у потпуности зависи од компајлера да би је проценила као инлине или не.
Структура напредних података
Низови
П # 21) Зашто се низови обично обрађују са петљом фор?
Одговор: Низ користи индекс за прелазак сваког од његових елемената.
Ако је А низ, тада се сваком од његових елемената приступа као А (и). Програмски, све што је потребно да би ово функционисало је итеративни блок са променљивом петље и који служи као индекс (бројач) увећавајући се од 0 до А.ленгтх-1.
То је управо оно што петља ради и то је разлог зашто обрађујемо низове користећи петље.
К # 22) Наведите разлику између брисања и брисања ().
Одговор: „Делете ()“ се користи за ослобађање меморије додељене низу који је додељен коришћењем новог (). „Делете“ се користи за ослобађање једног дела меморије који је додељен коришћењем новог.
П # 23) Шта није у реду са овим кодом?
Т * п = нови Т (10);
делете п;
Одговор: Горњи код је синтаксички исправан и компајлираће се у реду.
Једини проблем је што ће само избрисати први елемент низа. Иако је читав низ избрисан, позваће се само деструктор првог елемента и ослободити ће се меморија за први елемент.
П # 24) Којим редоследом се уништавају објекти у низу?
Одговор: Објекти у низу уништавају се обрнутим редоследом конструкције: Прво изграђени, последњи уништени.
У следећем Примеру, редослед деструктора биће (9), а (8),…, а (1), а (0):
voiduserCode() { Car a(10); ... }
Поинтерс
П # 25) Шта није у реду са овим кодом?
Т * п = 0;
делете п;
Одговор: У горњем коду, показивач је нулти показивач. Према стандарду Ц ++ 03, потпуно је валидно позвати брисање на НУЛЛ показивачу. Оператор делете би се интерно побринуо за НУЛЛ проверу.
П # 26) Шта је референтна променљива у Ц ++?
ДБМС отвореног кода је:
Одговор: Референтна променљива је псеудоним за постојећу променљиву. То значи да и име променљиве и референтна променљива воде на исто место меморије. Дакле, кад год се променљива ажурира, ажурира се и референца.
Пример:
int a=10; int& b = a;
Овде је б референца на а.
Класе складиштења
П # 27) Шта је класа складишта? Помените класе складиштења у Ц ++.
Одговор: Класа меморије одређује живот или опсег симбола као што су променљива или функције.
Ц ++ подржава следеће класе складишта:
- Ауто
- Статички
- Спољни
- Регистровати
- Променљиво
П # 28) Објасните спецификатор класе променљиве меморије.
Одговор: Променљива члана објекта константне класе не може се променити. Међутим, проглашавањем променљивих као „променљивих“, можемо променити вредности ових променљивих.
П # 29) Чему служи кључна реч ауто?
Одговор: Подразумевано је свака локална променљива функције аутоматска тј. ауто . У доњој функцији и променљиве „и“ и „ј“ су аутоматске променљиве.
void f() { int i; auto int j; }
БЕЛЕШКА : Глобална променљива није аутоматска променљива.
П # 30) Шта је статичка променљива?
Одговор: Статичка променљива је локална променљива која задржава своју вредност током позива функције. Статичке променљиве се декларишу помоћу кључне речи „статиц“. Нумеричке променљиве које су статичне имају подразумевану вредност нула.
Следећа функција ће исписати 1 2 3 ако се позове три пута.
void f() { static int i; ++i; printf(“%d “,i); }
Ако је глобална променљива статична, онда је њена видљивост ограничена на исти изворни код.
П # 31) Која је сврха Ектерн Стораге Специфиер?
Одговор: Спецификатор „Ектерн“ користи се за решавање опсега глобалног симбола.
#include using nam espace std; main() { extern int i; cout< У горњем коду, „и“ може бити видљиво изван датотеке где је дефинисано.
П # 32) Објасните Спецификатор складишта регистра.
Одговор: Променљива „Регистер“ треба да се користи кад год се користи променљива. Када је променљива декларисана спецификатором „регистер“, тада компајлер даје ЦПУ регистар за њено складиштење како би убрзао тражење променљиве.
П # 33) Када користити 'цонст' референтне аргументе у функцији?
Одговор: Коришћење референтних аргумената „цонст“ у функцији корисно је на неколико начина:
- „Цонст“ штити од програмских грешака које би могле изменити податке.
- Као резултат коришћења „цонст“, функција је у стању да обрађује и цонст и нон-цонст стварне аргументе, што није могуће када се „цонст“ не користи.
- Коришћење референце цонст омогућиће функцији да генерише и користи привремену променљиву на одговарајући начин.
Структура и кориснички дефинисани типови података
П # 34) Шта је разред?
Одговор: Класа је кориснички дефинисани тип података у језику Ц ++. Може се створити за решавање одређене врсте проблема. Након креирања, од корисника се не захтева да зна детаље о раду класе.
Генерално, класа делује као нацрт пројекта и може укључивати различите параметре и функције или радње које делују на те параметре. Они се зову чланови одељења.
П # 35) Разлика између класе и структуре.
Одговор:
Структура: У језику Ц, структура се користи за групирање различитих типова података заједно. Променљиве унутар структуре називају се члановима структуре. Ови чланови су подразумевано јавни и може им се приступити коришћењем имена структуре иза којег следи тачкасти оператор, а затим имена чланова.
Класа: Разред је наследник Структуре. Ц ++ проширује дефиницију структуре тако да укључује функције које делују на њене чланове. Подразумевано су сви чланови унутар класе приватни.
Објектно оријентисано програмирање са Ц ++
Часови, конструктори, деструктори
П # 36) Шта је простор имена?
Одговор: Простор имена омогућава нам груписање скупа глобалних класа, објеката и / или функција под одређено име.
Општи облик за употребу простора имена је:
идентификатор простора имена {намеспаце-боди}
Где је идентификатор било који ваљани идентификатор, а тело простора простора је скуп класа, објеката и функција који су укључени у простор имена. Простори имена посебно су корисни у случају када постоји могућност да више објеката има исто име, што резултира сукобима имена.
П # 37) Каква је корист од декларације „користећи“?
Одговор: Употреба декларације користи се за упућивање на име из простора имена без оператора резолуције опсега.
П # 38) Шта је име Манглинг?
Одговор: Ц ++ компајлер кодира типове параметара функцијом / методом у јединствено име. Овај процес се назива манглинг наме. Инверзни процес назива се демантирањем.
Пример:
А :: б (инт, дуго) цонст је искварен као „Б__Ц3Аил“ .
За конструктор, име методе је изостављено.
То је А :: А (инт, дуго) цонст је искварен као 'Ц3Аил'.
П # 39) Која је разлика између објекта и класе?
Одговор: Предавање је нацрт пројекта или проблема који треба решити и састоји се од променљивих и метода. Они се зову чланови одељења. Не можемо самостално приступити методама или променљивим класе уколико нису проглашени статичким.
Да бисмо приступили члановима класе и ставили их у употребу, требали бисмо створити инстанцу класе која се назива Објецт. Класа има неограничен животни век, док објекат има само ограничени животни век.
П # 40) Који су различити спецификатори приступа у Ц ++?
Одговор: Ц ++ подржава следеће спецификаторе приступа:
- Јавно: Члановима података и функцијама могуће је приступити изван класе.
- Приватни: Члановима података и функцијама није могуће приступити изван класе. Изузетак је употреба класе пријатеља.
- Заштићено: Чланови података и функције су доступни само изведеним класама.
Пример:
Опишите ПРИВАТНЕ, ЗАШТИЋЕНЕ и ЈАВНЕ заједно са њиховим разликама и наведите примере.
class A{ int x; int y; public int a; protected bool flag; public A() : x(0) , y(0) {} //default (no argument) constructor }; main(){ A MyObj; MyObj.x = 5; // Compiler will issue a ERROR as x is private int x = MyObj.x; // Compiler will issue a compile ERROR MyObj.x is private MyObj.a = 10; // no problem; a is public member int col = MyObj.a; // no problem MyObj.flag = true; // Compiler will issue a ERROR; protected values are read only bool isFlag = MyObj.flag; // no problem
П # 41) Шта је конструктор и како се зове?
Одговор: Конструктор је функција члана класе која има исто име као и класа. Углавном се користи за иницијализацију чланова класе. По дефаулту конструктори су јавни.
Постоје два начина на који се конструктори називају:
- Имплицитно: Компајлер имплицитно позива конструкторе када се креира објекат класе. Ово ствара објект на стеку.
- Експлицитно позивање: Када се објект класе креира помоћу нев, конструктори се експлицитно позивају. Ово обично ствара објекат на Купи.
Пример:
class A{ int x; int y; public A() : x(0) , y(0) {} //default (no argument) constructor }; main() { A Myobj; // Implicit Constructor call. In order to allocate memory on stack, //the default constructor is implicitly called. A * pPoint = new A(); // Explicit Constructor call. In order to allocate //memory on HEAP we call the default constructor. }
П # 42) Шта је КОПИРНИ КОНСТРУКТОР и када се зове?
Одговор: Конструктор копије је конструктор који прихвата објекат исте класе као свој параметар и копира своје чланове података у објекат у левом делу задатка. Корисно је када треба да конструишемо нови објекат исте класе.
Пример:
class A{ int x; int y; public int color; public A() : x(0) , y(0) {} //default (no argument) constructor public A( const A& ) ; }; A::A( const A & p ) { this->x = p.x; this->y = p.y; this->color = p.color; } main() { A Myobj; Myobj.color = 345; A Anotherobj = A( Myobj ); // now Anotherobj has color = 345 }
П # 43) Шта је подразумевани конструктор?
Одговор: Подразумевани конструктор је конструктор који или нема аргументе или ако их има, онда су сви они задани аргументи.
Пример:
class B { public: B (int m = 0) : n (m) {} int n; }; int main(int argc, char *argv()) { B b; return 0; }
П # 44) Шта је конструктор конверзије?
Одговор: То је конструктор који прихвата један аргумент другог типа. Конструктори за конверзију углавном се користе за претварање из једне врсте у другу.
П # 45) Шта је експлицитни конструктор?
Одговор: Конструктор конверзије се декларише са експлицитном кључном речи. Компајлер не користи експлицитни конструктор за имплементацију подразумеване конверзије типова. Његова сврха је изричито резервисана за изградњу.
П # 46) Која је улога кључне речи Статиц за променљиву члана класе?
Одговор: Променљива статички члан дели заједничку меморију у свим објектима креираним за одговарајућу класу. Не требамо се позивати на статичку променљиву члана помоћу објекта. Међутим, може му се приступити помоћу самог назива класе.
П # 47) Објасните функцију статичког члана.
Одговор: Функција статичког члана може приступити само променљивој статичког члана класе. Као и статичким променљивим члановима, функцији статичког члана такође се може приступити помоћу имена класе.
П # 48) Којим се редоследом уништавају локални објекти?
Одговор: Размислите о следећем делу кода:
Class A{ …. }; int main() { A a; A b; ... }
У главној функцији имамо два објекта створена један за другим. Стварају се редом, прво а затим б. Али када се ови објекти избришу или ако изађу из опсега, деструктор за сваки од њих биће позван обрнутим редоследом којим су конструисани.
Стога ће се прво позвати деструктор б, а затим а. Чак и ако имамо низ објеката, они ће бити уништени на исти начин обрнутим редоследом њиховог стварања.
Преоптерећење
П # 49) Објасните преоптерећење функције и преоптерећење оператора.
Одговор: Ц ++ подржава концепт полиморфизма ООП-а, што значи „многи облици“.
У језику Ц ++ имамо две врсте полиморфизама, тј. Полиморфизам компајлираног времена и полиморфизам времена извршавања. Полиморфизам компајлираног времена постиже се употребом технике преоптерећења. Преоптерећење једноставно значи давање додатног значења ентитету одржавањем његовог основног значења нетакнутим.
Ц ++ подржава две врсте преоптерећења:
Преоптерећење функције:
Преоптерећење функције је техника која програмеру омогућава да има више функција са истим именом, али са различитим пописом параметара. Другим речима, функцију преоптерећујемо различитим аргументима, тј. Била то врста аргумената, број аргумената или редослед аргумената.
Преоптерећење функције се никада не постиже на повратном типу.
Преоптерећење оператера:
Ово је још једна врста полиморфизма током компајлирања коју подржава Ц ++. У преоптерећењу оператора, оператор је преоптерећен, тако да може да ради на кориснички дефинисаним типовима, као и на операндима стандардног типа података. Али док то радимо, стандардна дефиниција тог оператора остаје нетакнута.
На пример, оператор сабирања (+) који ради на нумеричким типовима података може бити преоптерећен да би радио на два објекта баш као и објекат сложене класе бројева.
П # 50) Која је разлика између преоптерећења метода и замене метода у Ц ++?
Одговор: Преоптерећење методе има функције са истим именом, али различитим списковима аргумената. Ово је облик полиморфизма током компајлирања.
Замена методе долази у слику када препишемо методу која је изведена из основне класе. Замена методе користи се док се ради са полиморфизмом у току или са виртуелним функцијама.
П # 51) Која је разлика између конструктора за копирање и преоптерећеног Оператор доделе?
Одговор: Конструктор копије и преоптерећени оператор додељивања у основи служе истој наменици, тј. Додељивању садржаја једног објекта другом. Али ипак постоји разлика између њих двоје.
Пример:
complex c1,c2; c1=c2; //this is assignment complex c3=c2; //copy constructor
У горњем примеру, други израз ц1 = ц2 је преоптерећени израз додељивања.
Овде су и ц1 и ц2 већ постојећи објекти и садржај ц2 додељује се објекту ц1. Дакле, за преоптерећени израз додељивања оба објекта морају бити већ створена.
Следећа изјава, комплекс ц3 = ц2 је пример конструктора копирања. Овде је садржај ц2 додељен новом објекту ц3, што значи да конструктор копирања ствара нови објекат сваки пут када се изврши.
П # 52) Наведите операторе који се не могу преоптеретити.
Одговор:
- сизеоф - величина оператора
- . - Оператер тачака
- . * - оператор преусмеравања
- -> - оператер преусмеравања члана
- :: - оператер резолуције опсега
- ?: - условни оператор
П # 53) Функција се може преоптеретити на основу параметра који је вредност или референца. Објасните да ли је тврдња тачна.
Одговор: Нетачно. И прослеђивање вредности и прослеђивање референце изгледају идентично позиваоцу.
П # 54) Које су предности преоптерећења оператера?
Одговор: Преоптерећењем стандардних оператора на класи, можемо проширити значење ових оператора, тако да они могу радити и на другим кориснички дефинисаним објектима.
Преоптерећење функција омогућава нам да смањимо сложеност кода и учинимо га јаснијим и читљивијим, јер можемо имати иста имена функција са различитим листама аргумената.
Наслеђивање
П # 55) Шта је наслеђивање?
Одговор: Наслеђивање је процес помоћу којег можемо стећи карактеристике постојећег ентитета и формирати нови ентитет додавањем више карактеристика у њега.
У погледу Ц ++, наслеђивање ствара нову класу изводећи је из постојеће класе тако да ова нова класа има својства своје родитељске класе као и своје.
П # 56) Које су предности наслеђивања?
Одговор: Наслеђивање омогућава поновну употребљивост кода, чиме се штеди време на развоју кода.
Наслеђивањем користимо висококвалитетни софтвер без грешака који смањује будуће проблеме.
П # 57) Да ли Ц ++ подржава више нивоа и више наслеђа?
Одговор: Да.
П # 58) Шта су вишеструка наслеђа (виртуелно наследство)? Које су његове предности и недостаци?
Одговор: У више наслеђа имамо више од једне основне класе из које изведена класа може да наследи. Стога изведена класа узима својства и својства више од једне основне класе.
На пример , класа возач имаће две основне класе, наиме, запослени и особа јер је возач запослени као и особа. Ово је повољно јер класа возача може наследити својства запосленог као и класу особа.
Али у случају запосленог и особе, класа ће имати нека заједничка својства. Међутим, доћи ће до двосмислене ситуације јер класа возача неће знати класе из којих треба наследити заједничка својства. Ово је главни недостатак вишеструког наслеђа.
П # 59) Објасните однос класе ИСА и ХАСА. Како бисте применили сваки?
Одговор: Однос „ИСА“ обично показује наследство, јер подразумева да је класа „ИСА“ специјализована верзија друге класе. На пример , Запослени ИСА лице. То значи да се класа Емплоиее наслеђује из класе Персон.
Супротно „ИСА“, однос „ХАСА“ приказује да ентитет може да има други ентитет као свог члана или да класа има уграђен други објекат.
Узимајући дакле исти пример класе Емплоиее, начин на који класу Плата повезујемо са запослеником није његово наслеђивање, већ укључивањем или садржавањем објекта Салари унутар класе Емплоиее. Однос „ХАСА“ најбоље се показује задржавањем или агрегацијом.
П # 60) Да ли изведена класа наслеђује или не наслеђује?
Одговор: Када је изведена класа конструисана од одређене основне класе, она у основи наслеђује све карактеристике и обичне чланове основне класе. Али постоје неки изузеци од овог правила. На пример, изведена класа не наслеђује конструкторе и деструкторе основне класе.
Свака класа има своје конструкторе и деструкторе. Изведена класа такође не наслеђује оператора доделе основне класе и пријатеља класе. Разлог је тај што су ти ентитети специфични за одређену класу и ако је изведена друга класа или је пријатељ те класе, онда им се не могу проследити.
Полиморфизам
П # 61) Шта је полиморфизам?
Одговор: Основна идеја која стоји иза полиморфизма је у многим облицима. У језику Ц ++ имамо две врсте полиморфизма:
(и) Полиморфизам компајлираног времена
У полиморфизму током компајлирања постижемо многе облике преоптерећењем. Дакле, имамо преоптерећење оператора и преоптерећење функције. (Ово смо већ покрили горе)
(ии) Полиморфизам током извођења
Ово је полиморфизам класа и предмета. Општа идеја је да основну класу може наследити неколико класа. Показивач основне класе може усмерити на своју подређену класу, а низ основне класе може сместити различите објекте подређене класе.
То значи, да објекат различито реагује на исти позив функције. Ова врста полиморфизма може да користи механизам виртуелне функције.
П # 62) Шта су виртуелне функције?
Одговор: Виртуелна функција омогућава изведеним класама да замене имплементацију коју пружа основна класа.
Кад год имамо функције са истим именом у бази као и изведена класа, јавља се нејасноћа када покушавамо да приступимо објекту подређене класе помоћу показивача основне класе. Како користимо показивач основне класе, позвана функција је функција основне класе са истим именом.
Да бисмо исправили ову двосмисленост, користимо кључну реч „виртуелни“ пре прототипа функције у основној класи. Другим речима, ову полиморфну функцију чинимо виртуелном. Коришћењем виртуелне функције можемо уклонити двосмисленост и можемо правилно приступити свим функцијама подређене класе помоћу показивача основне класе.
П # 63) Наведите пример полиморфизма / виртуелних функција током извођења.
Одговор:
class SHAPE{ public virtual Draw() = 0; //abstract class with a pure virtual method }; class CIRCLE: public SHAPE{ public int r; public Draw() { this->drawCircle(0,0,r); } }; class SQUARE: public SHAPE{ public int a; public Draw() { this->drawSquare(0,0,a,a); } }; int main() { SHAPE shape1*; SHAPE shape2*; CIRCLE c1; SQUARE s1; shape1 = &c1; shape2 = &s1; coutУ горњем коду, класа СХАПЕ има чисто виртуелну функцију и апстрактна је класа (не може се инстанцирати). Свака класа је изведена из СХАПЕ-а који на свој начин имплементира функцију Драв ().
Даље, свака функција Драв је виртуелна, тако да када користимо показивач основне класе (СХАПЕ) сваки пут са објектом изведених класа (Цирцле и СКУАРЕ), тада се позивају одговарајуће функције Драв.
П # 64) Шта подразумевате под чистим виртуелним функцијама?
Одговор: Функција чистог виртуелног члана је функција члана у којој основна класа приморава изведене класе да пониште. Ова функција члана обично нема имплементацију. Чисте виртуелне функције изједначене су са нулом.
Пример:
class Shape { public: virtual void draw() = 0; };
Основна класа која има чисту виртуелну функцију као свог члана може се назвати „апстрактна класа“. Ова класа се не може инстанцирати и она обично делује као нацрт који има неколико подкласа са даљом имплементацијом.
П # 65) Шта су виртуелни конструктори / деструктори?
Одговор:
Виртуални деструктори: Када користимо показивач основне класе који показује на изведени објект класе и користимо га за његово уништавање, онда се уместо позивања деструктора изведене класе позива деструктор основне класе.
Пример:
Class A{ …. ~A(); }; Class B:publicA{ … ~B(); }; B b; A a = &b; delete a;
Као што је приказано у горњем примеру, када кажемо делете а, деструктор се зове, али је заправо деструктор основне класе. То доводи до двосмислености да сва меморија коју држи б неће бити правилно очишћена.
Овај проблем се може решити коришћењем концепта „Виртуал Деструцтор“.
Оно што радимо је да конструктор основне класе направимо „Виртуал“ тако да сви деструктори подређене класе такође постану виртуелни и када избришемо објекат основне класе који показује на објекат изведене класе, позива се одговарајући деструктор и сви објекти се правилно бришу.
Ово је приказано на следећи начин:
како обрисати елемент низа у јави
Class A{ …. virtual ~A(); }; Class B:publicA{ … ~B(); }; B b; A a = &b; delete a;
Виртуал буилдер : Конструктори не могу бити виртуелни. Декларација конструктора као виртуелне функције је синтаксна грешка.
Пријатељу
П # 66) Шта је функција пријатеља?
Одговор: Класа Ц ++ не дозвољава приступ њеним приватним и заштићеним члановима изван класе. Али ово правило се може прекршити коришћењем „ Пријатељу ”Функција.
Као што и само име говори, функција пријатеља је спољна функција која је пријатељ класе. Да би функција пријатеља приступила приватним и заштићеним методама класе, требали бисмо да имамо прототип функције пријатеља са кључном речи „пријатељ“ која је укључена у класу.
П # 67) Шта је час пријатеља?
Одговор: Класе пријатеља користе се када треба да заменимо правило за приватне и заштићене спецификаторе приступа тако да две класе могу блиско да сарађују.
Дакле, можемо имати разред пријатеља да будемо пријатељи другог разреда. На овај начин часови пријатеља могу задржати приватне, неприступачне ствари онакве какве јесу.
Када имамо захтев да приступимо интерној имплементацији класе (приватни члан) без излагања детаља објављивањем јавности, користимо функције пријатеља.
Напредни Ц ++
Предлошци
П # 68) Шта је шаблон?
Одговор: Предлошци омогућавају стварање функција које су независне од типа података (генеричке) и могу узети било који тип података као параметре и повратну вредност без потребе за преоптерећењем функције свим могућим типовима података. Предлошци готово испуњавају функционалност макроа.
Његов прототип је било који од следећих:
шаблон идентификовати > фунцтион_децларатион;
шаблон идентификовати > фунцтион_децларатион;
Једина разлика између оба прототипа је употреба класе кључне речи или имена типа. Њихова основна функционалност да буду генерички остаје иста.
Изузетак руковање
П # 69) Шта је руковање изузецима? Да ли Ц ++ подржава руковање изузецима?
Одговор: Да, Ц ++ подржава руковање изузецима.
Не можемо бити сигурни да ће се код нормално извршавати у сваком тренутку. Постоје одређене ситуације које би могле да натерају код који смо написали да не ради, иако је без грешака. Ова неисправност кода се назива Изузетак .
Када се догоди изузетак, преводилац га мора бацити како бисмо знали да се изузетак догодио. Када се изузме изузетак, компајлер мора осигурати да се њиме правилно рукује, тако да се ток програма наставља или правилно завршава. Ово се зове руковање изузетком.
Тако у Ц ++ имамо три кључне речи тј. покушати , бацити и улов који су у руковању изузецима.
Општа синтакса за блок изузетака је:
try{ …. # Code that is potentially about to throw exception goes here …. throw exception; } catch(exception type) { … #code to handle exception goes here }
Као што је горе приказано, код који може потенцијално покварити стављен је под блок три. Када код не функционише, појављује се изузетак. Овај изузетак се затим ухвати испод блока цатцх и њиме се рукује, тј. Предузимају се одговарајуће мере.
П # 70) Коментар на изузецима Ц ++ стандарда?
Одговор: Ц ++ подржава неке стандардне изузетке који се могу ухватити ако код ставимо у блок три. Ови изузеци су део основне класе „ стд :: изузетак ”. Ова класа је дефинисана у датотеци заглавља Ц ++.
Неколико примера изузетака које ова класа подржава:
бад_аллоц - бацио „нови“
рунтиме_еррор - бачена због рунтиме грешака
бад_типеид - избацује тип ид
Увод у библиотеку стандардних шаблона
П # 71) Шта је стандардна библиотека предложака (СТЛ)? Које су различите врсте СТЛ контејнера?
Одговор: Стандардна библиотека шаблона (СТЛ) је библиотека предложака контејнера коју је одобрио АНСИ одбор за укључивање у стандардну спецификацију Ц ++. Имамо разне врсте СТЛ контејнера у зависности од тога како чувају елементе.
- Ред, Стацк - То је исто као и традиционални ред и скуп и називају се прилагодљиви контејнери.
- Сет, Мап - То су у основи контејнери који имају парове кључ / вредност и асоцијативне су природе.
- Вектор и - Они су секвенцијалне природе и имају сличности са низовима.
П # 72) Шта је класа Итератор?
Одговор: У Ц ++ класа контејнера је колекција различитих објеката.
Ако треба да пређемо кроз ову колекцију објеката, не можемо то да урадимо помоћу једноставних индексних променљивих. Отуда имамо посебну наставу у СТЛ која се зове Итератор класа која се може користити за пролазак кроз садржај класе контејнера.
Разне категорије итератора укључују улазни итератори, излазни итератори, проследљиви итератори, двосмерни итератори, насумични приступ итд.
П # 73) Која је разлика између спољног и итератора? Опишите предност Спољног итератора.
Одговор: Интерни итератор је имплементиран са функцијама члана класе кроз које се прелазе ставке.
Спољни итератор је имплементиран као засебна класа која се може везати за објекат који има ставке кроз које треба прећи. Основна предност екстерног итератора је у томе што је једноставан за примену јер се примењује као посебна класа.
Друго, како се ради о другој класи, многи итераторски објекти могу бити активни истовремено.
Даље читање => Ц # Интервју питања
Закључак
У овом чланку су обрађене готово све главне теме кодирања и програмирања Ц ++ интервјуа.
Надамо се да ће се било који кандидат осећати опуштено након припреме за интервју помоћу ове серије интервјуа.
Све најбоље за ваш интервју !!
Препоручено читање
- Интервјуирајте питања и одговоре
- Питања и одговори за испитивање ЕТЛ-а
- Нека незгодна ручна тестирања питања и одговори
- 25 најбољих агилних тестова за интервју и питања и одговори
- Споцк интервју питања са одговорима (најпопуларније)
- Нека занимљива питања за испитивање софтверског тестирања
- Топ 20+ .НЕТ питања и одговори за интервјуе
- 32 најбоља питања и одговори за интервју за Датастаге