top 70 c interview questions
Giriş seviyesi adayları ve deneyimli profesyoneller için kod örnekleri ile Sıkça Sorulan Temel ve İleri Düzey C ++ Mülakat Soruları:
Bu ayrıntılı makale kesinlikle C ++ röportajına hazırlananlar için bir yer imi olacaktır.
C ++ 'daki hemen hemen tüm ana konular, Standart Şablon Kitaplığı (STL), vb. Gibi gelişmiş konulardaki bazı temel sorularla birlikte burada ele alınmaktadır.
Bu C ++ kodlama soruları seti, herhangi bir C ++ mülakatıyla kendinizden emin bir şekilde yüzleşmenize ve ilk denemede başarılı bir şekilde temizlemenize yardımcı olacaktır.
Ne öğreneceksin:
- Kod Örnekleriyle C ++ Mülakat Soruları
Kod Örnekleriyle C ++ Mülakat Soruları
Aşağıda, bir C ++ uzmanı tarafından cevaplanan en popüler C ++ programlama mülakat soruları listelenmiştir.
Ayrıca => okuyun En İyi C Programlama Mülakat Soruları
Temel C ++
C ++ Programının Yapısı
S # 1) Bir C ++ programının temel yapısı nedir?
Cevap: Bir C ++ programının temel yapısı aşağıda gösterilmiştir:
#include int main() { cout<<”Hello,World!”; return 0; }
'İle başlayan ilk satır # 'Bir Önişlemci direktifi . Bu durumda kullanıyoruz Dahil etmek derleyiciye bir başlık eklemesini söyleyen bir yönerge olarak ' iostream.h Programda daha sonra temel giriş / çıkış için kullanılacak.
Sonraki satır, bir tamsayı döndüren 'ana' işlevdir. Ana işlev, herhangi bir C ++ programı için yürütmenin başlangıç noktasıdır. Kaynak kod dosyasındaki konumundan bağımsız olarak, ana işlevin içeriği her zaman önce C ++ derleyicisi tarafından yürütülür.
Sonraki satırda, bir kod bloğunun başlangıcını gösteren açık küme parantezleri görebiliriz. Bundan sonra, standart çıktı akışı olan sayımı kullanan programlama talimatını veya kod satırını görürüz (tanımı iostream.h'de mevcuttur).
Bu çıktı akışı bir karakter dizisi alır ve bunu standart bir çıktı aygıtına yazdırır. Bu durumda 'Merhaba Dünya!' Dır. Lütfen her C ++ talimatının bir noktalı virgülle (;) sona erdiğine dikkat edin, bu çok gereklidir ve bunu atlamak derleme hatalarına neden olur.
Küme ayraçlarını kapatmadan önce}, başka bir “return 0;” satırı görüyoruz. Bu, ana işleve geri dönüş noktasıdır.
Her C ++ programı, yukarıda gösterildiği gibi bir önişlemci yönergesi, ana işlev bildirimi ve ardından bir kod bloğu ve ardından programın başarılı bir şekilde yürütüldüğünü gösteren ana işleve geri dönüş noktası içeren temel bir yapıya sahip olacaktır.
S # 2) C ++ 'daki Yorumlar nelerdir?
Cevap: C ++ 'daki yorumlar, derleyici tarafından göz ardı edilen bir kaynak kod parçasıdır. Yalnızca bir programcının kaynak kodları hakkında bir açıklama veya ek bilgi eklemesine yardımcı olurlar.
C ++ 'da yorum eklemenin iki yolu vardır:
- // tek satır yorum
- / * yorumu engelle * /
İlk tür, derleyici '//' ile karşılaştıktan sonra her şeyi atacaktır. İkinci türde, derleyici '/ *' ve '* /' arasındaki her şeyi atar.
Değişkenler, Veri Tipleri ve Sabitler
S # 3) Bir değişkenin açıklaması ve tanımı arasındaki fark.
Cevap: Bir değişkenin bildirimi, yalnızca bir değişkenin veri türünü ve değişken adını belirtmektir. Bildirimin bir sonucu olarak, derleyiciye belirtilen veri türüne göre bellekteki bir değişken için yer ayırmasını söyleriz.
Misal:
int Result; char c; int a,b,c;
Yukarıdakilerin tümü geçerli beyanlardır. Ayrıca, bildirimin bir sonucu olarak değişkenin değerinin belirsiz olduğuna dikkat edin.
Oysa bir tanım, bildirilen değişkenin uygun değeri bildirilen değişkene bağladığımız bir uygulaması / somutlaştırmasıdır, böylece bağlayıcının referansları uygun varlıklara bağlayabilmesi sağlanır.
Yukarıdaki Örnekten ,
Sonuç = 10;
C = 'A';
Bunlar geçerli tanımlardır.
S # 4) Bir değişkenin Yerel ve Global kapsamı hakkında yorum yapın.
Cevap: Bir değişkenin kapsamı, değişkenin aktif kaldığı program kodunun kapsamı olarak tanımlanır, yani ilan edilebilir, tanımlanabilir veya üzerinde çalışılabilir.
C ++ 'da iki tür kapsam vardır:
- Yerel Kapsam: Bir değişkenin yerel bir kapsamı olduğu veya bir kod bloğu içinde bildirildiğinde yerel olduğu söylenir. Değişken yalnızca bloğun içinde aktif kalır ve kod bloğunun dışından erişilemez.
- Global Kapsam: Program boyunca erişilebilir olduğunda bir değişken küresel bir kapsama sahiptir. Tüm fonksiyon tanımlarından önce programın tepesinde global bir değişken bildirilir.
Misal:
#include Int globalResult=0; //global variable int main() { Int localVar = 10; //local variable. ….. }
S # 5) Programda aynı ada sahip bir Global değişken ve bir Yerel değişken olduğunda öncelik nedir?
Cevap: Global bir değişkenle aynı ada sahip bir yerel değişken olduğunda, derleyici yerel değişkene öncelik verir.
Misal:
#include int globalVar = 2; int main() { int globalVar = 5; cout<Yukarıdaki kodun çıktısı 5'tir. Bunun nedeni, her iki değişkenin aynı ada sahip olmasına rağmen, derleyicinin yerel kapsamı tercih etmesidir.
S # 6) Aynı isimde bir Global değişken ve Yerel değişken olduğunda, global değişkene nasıl erişeceksiniz?
Cevap: Aynı ada sahip ancak farklı kapsama sahip iki değişken olduğunda, yani biri yerel değişken ve diğeri genel değişken olduğunda, derleyici yerel bir değişkeni tercih edecektir.
Global değişkene erişmek için, ' kapsam çözünürlük operatörü (: :) ”. Bu operatörü kullanarak global değişkenin değerine erişebiliriz.
Misal:
#include int x= 10; int main() { int x= 2; cout<<”Global Variable x = “<<::x; cout<<”
local Variable x= “< Çıktı:
Global Değişken x = 10
yerel Değişken x = 2
S # 7) Bir int'i Sabit ile başlatmanın kaç yolu vardır?
Cevap: İki yol var:
- İlk biçim geleneksel C gösterimini kullanır.
int sonuç = 10; - İkinci format yapıcı gösterimini kullanır.
int sonuç (10);
Sabitler
S # 8) Sabit nedir? Bir örnekle açıklayın.
Cevap: Sabit, sabit bir değeri olan bir ifadedir. Veri türlerine bağlı olarak tamsayı, ondalık, kayan nokta, karakter veya dize sabitlerine bölünebilirler.
Ondalık dışında, C ++ ayrıca iki sabiti daha destekler, yani sekizlik (taban 8'e) ve onaltılık (taban 16'ya) sabitler.
Sabitler Örnekleri:
- 75 // tamsayı (ondalık)
- 0113 // sekizlik
- 0x4b // onaltılık
- 3.142 // kayan nokta
- 'C' // karakter sabiti
- 'Merhaba, Dünya' // dize sabiti
Not: Tek bir karakteri temsil etmemiz gerektiğinde, tek tırnak kullanırız ve birden fazla karakterli bir sabit tanımlamak istediğimizde çift tırnak kullanırız.
S # 9) C ++ 'da sabitleri nasıl tanımlar / bildirirsiniz?
Cevap: C ++ 'da, kendi sabitlerimizi kullanarak #tanımlamak Önişlemci direktifi.
#define Tanımlayıcı değeri
Misal:
#include #define PI 3.142 int main () { float radius =5, area; area = PI * r * r; cout<<”Area of a Circle = “< Çıktı: Bir Çemberin Alanı = 78.55
Yukarıdaki örnekte gösterildiği gibi, #define direktifini kullanarak bir sabiti tanımladığımızda, onu program boyunca kullanabilir ve değerini değiştirebiliriz.
Sabitleri C ++ 'da ' sabit ”Anahtar kelime. Bu yöntem, bir değişkeni bildirmeye benzer, ancak bir const öneki içerir.
Sabit ilan etme örnekleri
const int pi = 3,142;
const char c = 'sth';
const posta kodu = 411014;
Yukarıdaki örneklerde, bir sabitin türü belirtilmediğinde, C ++ derleyicisi bunu varsayılan olarak bir tamsayı türüne getirir.
Operatörler
S # 10) C ++ 'da Atama Operatörü hakkında yorum.
Cevap: C ++ 'daki atama operatörü, başka bir değişkene bir değer atamak için kullanılır.
a = 5;
Bu kod satırı, tam sayı değerini atar 5 değişkene -e .
= Operatörünün solundaki kısım, lvalue (sol değer) ve sağdaki gibi rvalue (doğru değer). L değer her zaman bir değişken olmalıdır, oysa sağ taraf bir sabit, değişken, bir işlemin sonucu veya bunların herhangi bir kombinasyonu olabilir.
Atama işlemi her zaman sağdan sola gerçekleşir ve asla tersi olmaz.
C ++ 'ın diğer programlama dilleri üzerinde sahip olduğu bir özellik, atama operatörünün rvalue (veya bir rvalue ) başka bir görev için.
Misal:
a = 2 + (b = 5);
eşdeğerdir:
b = 5;
a = 2 + b;
Bu, ilk atama anlamına gelir 5 değişkene b ve sonra atayın için değer iki artı önceki ifadesinin sonucu b (yani 5), yapraklar -e son değeri ile 7 .
Bu nedenle, aşağıdaki ifade C ++ 'da da geçerlidir:
a = b = c = 5;
değişkenlere 5 atayın -e , b ve c .
S # 11) Eşittir (==) ile Atama Operatörü (=) arasındaki fark nedir?
Cevap: C ++ 'da, eşittir (==) ve atama operatörü (=) tamamen farklı iki operatördür.
Eşittir (==), eşit olup olmadıklarını görmek için iki ifadeyi değerlendiren ve eşit değilse doğru, değilse yanlış döndüren bir eşitlik ilişkisel operatörüdür.
Atama operatörü (=), bir değişkene bir değer atamak için kullanılır. Dolayısıyla, değerlendirme için eşitlik ilişkisel operatörü içinde karmaşık bir atama işlemine sahip olabiliriz.
S # 12) C ++ 'daki çeşitli Aritmetik Operatörler nelerdir?
Cevap: C ++ aşağıdaki aritmetik operatörleri destekler:
- + ekleme
- - çıkarma
- * çarpma işlemi
- / bölünme
- % modül
Aşağıdaki kod parçasıyla çeşitli aritmetik operatörleri gösterelim.
Misal:
#include int main () { int a=5, b=3; cout<<”a + b = “< Çıktı :
a + b = 8
a - b = 2
a * b = 15
a / b = 2
a% b = 1
Yukarıda gösterildiği gibi, diğer tüm işlemler basittir ve oldukça farklı olan modulo operatörü haricinde gerçek aritmetik işlemlerle aynıdır. Modulo operatörü a ve b'yi böler ve işlemin sonucu, bölümün geri kalanıdır.
S # 13) C ++ 'daki çeşitli Bileşik Atama Operatörleri nelerdir?
Cevap: Aşağıdakiler, C ++ 'daki Bileşik atama işleçleridir:
+ =, - =, * =, / =,% =, >> =,<<=, &=, ^=,|=
Bileşik atama operatörü, bir değişkenin değerini temel operatörlerden biriyle değiştirmemize izin veren C ++ dilinin en önemli özelliklerinden biridir:
Misal:
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;
S # 14) Artırma Öncesi ve Sonrası / Azaltma İşlemleri arasındaki farkı belirtin.
Cevap: C ++, bir değişkenin mevcut değerine 1 eklemenize ve değişkenden 1 çıkarmanıza olanak tanıyan iki operatöre, yani ++ (artış) ve - (azaltma) izin verir. Bu operatörler sırasıyla artış (++) ve azaltma (-) olarak adlandırılır.
Misal:
a = 5;
a ++;
İkinci ifade olan a ++, 1'in a'nın değerine eklenmesine neden olur. Bu nedenle a ++ eşdeğerdir
a = a + 1; veya
a + = 1;
Bu operatörlerin benzersiz bir özelliği, bu operatörlere değişkenle önek veya son ekleyebilmemizdir. Dolayısıyla, eğer a bir değişkense ve artırma operatörünün önüne eklersek,
++ a;
Buna Ön artış denir. Benzer şekilde, ön eksilememiz de var.
A değişkeninin önüne bir artış operatörü koyarsak,
a ++;
Bu, artım sonrası. Aynı şekilde, post-indirimimiz de var.
Ön ve sonun anlamı arasındaki fark, ifadenin nasıl değerlendirildiğine ve sonucun nasıl saklandığına bağlıdır.
Ön artırma / azaltma operatörü durumunda, önce artırma / azaltma işlemi gerçekleştirilir ve ardından sonuç bir l değere geçirilir. Arttırma / azaltma sonrası işlemlerde ise önce ldeğer değerlendirilir ve buna göre artırma / azaltma yapılır.
Misal:
a = 5; b = 6;
++ a; # a = 6
b–; # b = 6
–A; # a = 5
b ++; # 6
Konsol aracılığıyla G / Ç
S # 15) C ++ 'daki Çıkarma ve Ekleme operatörleri nelerdir? Örneklerle açıklayın.
Cevap: C ++ iostream.h kitaplığında, cin , ve maliyet sırasıyla giriş ve çıkış için kullanılan iki veri akışıdır. Cout normalde ekrana yönlendirilir ve cin klavyeye atanır.
'Cin' (çıkarma operatörü): Cin akışı ile aşırı yüklenmiş operatörü >> kullanarak, C ++ standart girişi işler.
int age; cin>>age;
Yukarıdaki örnekte gösterildiği gibi, bir tamsayı değişkeni 'yaş' bildirilir ve ardından cin (klavye) veriyi girene kadar bekler. 'Cin', girişi yalnızca GERİ DÖN tuşuna basıldığında işler.
'Cout' (ekleme operatörü): Bu, aşırı yüklenmiş<< operator. It directs the data that followed it into the cout stream.
Misal:
chrome'da swf dosyası nasıl açılır
cout<<”Hello, World!”; cout<<123;
Kontrol Yapıları ve İşlevleri
Kontrol Yapıları ve Döngüleri
S # 16) while ve do while döngüsü arasındaki fark nedir? Örneklerle açıklayın.
Cevap: C ++ 'da while döngüsünün biçimi şöyledir:
While (ifade)
{ifadeler;}
While altındaki ifade bloğu, verilen ifadedeki koşul doğru olduğu sürece yürütülür.
Misal:
#include int main() { int n; cout<>n; while(n>0) { cout<<” “<Yukarıdaki kodda, n 0 ise döngü doğrudan çıkacaktır. Bu nedenle while döngüsünde, sonlandırma koşulu döngünün başlangıcındadır ve yerine getirilirse döngünün hiçbir yinelemesi yürütülmez.
Ardından, do-while döngüsünü ele alıyoruz.
Do-while'ın genel biçimi şöyledir:
do {ifade;} while (koşul);
Misal:
#include int main() { int n; cout<>n; do { cout<Yukarıdaki kodda, döngü koşulu sonda olduğu için döngü içindeki ifadenin en az bir kez çalıştırıldığını görebiliriz. Bunlar while ve do-while arasındaki temel farklardır.
While döngüsü durumunda, koşul karşılanmazsa, başlangıçta doğrudan döngüden çıkabiliriz, oysa do-while döngüsünde döngü ifadelerini en az bir kez çalıştırırız.
Fonksiyonlar
S # 17) 'Geçersiz' dönüş türü ile neyi kastediyorsunuz?
Cevap: Tüm işlevler, genel sözdizimine göre bir değer döndürmelidir.
Ancak, bir işlevin herhangi bir değer döndürmesini istemiyorsak, ' geçersiz ”Belirtmek için. Bu, ' geçersiz 'İşlevin dönüş değeri olmadığını veya' geçersiz ”.
Misal:
void myfunc() { Cout<<”Hello,This is my function!!”; } int main() { myfunc(); return 0; }
S # 18) Değere Göre Geçişi ve Referansla Geçişi Açıklayın.
Cevap: 'Değere Göre Geç' kullanarak işleve parametreler iletirken, parametrelerin bir kopyasını işleve iletiyoruz.
Bu nedenle, çağrılan işlevdeki parametrelerde yapılan değişiklikler, çağıran işleve geri gönderilmez. Böylece, çağıran işlevdeki değişkenler değişmeden kalır.
Misal:
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 = “< Çıktı:
x = 1
y = 3
z = 4
Yukarıda görüldüğü gibi, çağrılan işlevde parametreler değiştirilmesine rağmen, değerleri değer olarak iletildiklerinden çağıran işlevde yansıtılmamıştır.
Bununla birlikte, değiştirilen değerleri işlevden çağıran işleve geri almak istiyorsak, o zaman “Geçişle Referans” tekniğini kullanırız.
Bunu göstermek için yukarıdaki programı aşağıdaki gibi değiştiriyoruz:
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 = “< Çıktı:
x = 2
y = 6
z = 8
Yukarıda gösterildiği gibi, çağrılan işlevlerdeki parametrelere yapılan değişiklikler, 'Geçişle gönderme' tekniğini kullandığımızda çağıran işleve aktarılır. Bunun nedeni, bu tekniği kullanarak parametrelerin bir kopyasını iletmememiz, ancak aslında değişkenin referansının kendisini iletmemizdir.
S # 19) Varsayılan Parametreler Nelerdir? C ++ işlevinde nasıl değerlendirilirler?
Cevap: Varsayılan Parametre, bir işlevi bildirirken her parametreye atanan bir değerdir.
Bu değer, işlev çağrılırken bu parametre boş bırakılırsa kullanılır. Belirli bir parametre için varsayılan bir değer belirtmek için, fonksiyon bildirimindeki parametreye basitçe bir değer atarız.
İşlev çağrısı sırasında bu parametre için değer iletilmezse, derleyici sağlanan varsayılan değeri kullanır. Bir değer belirtilirse, bu varsayılan değere basılır ve aktarılan değer kullanılır.
deneyimli için datastage mülakat soruları ve cevapları
Misal:
int multiply(int a, int b=2) { int r; r = a * b; return r; } int main() { Cout< Çıktı:
12
6
Yukarıdaki kodda gösterildiği gibi, çarpma işlevi için iki çağrı vardır. İlk çağrıda, bir değer içeren yalnızca bir parametre aktarılır. Bu durumda, ikinci parametre sağlanan varsayılan değerdir. Ancak ikinci çağrıda, her iki parametre değeri de iletildiği için, varsayılan değer geçersiz kılınır ve aktarılan değer kullanılır.
S # 20) C ++ 'da bir Satır içi işlevi nedir?
Cevap: Satır içi işlev, derleyici tarafından işlevi çağırma noktası olarak derlenen ve kod bu noktada değiştirilen bir işlevdir. Bu, derlemeyi daha hızlı hale getirir. Bu işlev, işlev prototipinin önüne 'satır içi' anahtar sözcüğü eklenerek tanımlanır.
Bu tür işlevler, yalnızca satır içi işlevin kodu küçük ve basit olduğunda avantajlıdır. Bir işlev Inline olarak tanımlansa da, onu inline olarak değerlendirmek tamamen derleyiciye bağlıdır.
Gelişmiş Veri Yapısı
Diziler
S # 21) Neden diziler genellikle for döngüsü ile işlenir?
Cevap: Dizi, dizini, öğelerinin her birini geçmek için kullanır.
A bir diziyse, elemanlarının her birine A (i) olarak erişilir. Programlı olarak, bunun çalışması için gerekli olan tek şey, 0'dan A. uzunluk-1'e artan bir indeks (sayaç) olarak hizmet eden bir döngü değişkenine sahip iteratif bir bloktur.
Döngünün yaptığı tam olarak budur ve dizileri for döngüleri kullanarak işlememizin nedeni budur.
S # 22) Silme ve silme () arasındaki farkı belirtin.
Cevap: 'Sil ()', yeni () kullanılarak ayrılmış bir diziye ayrılmış belleği serbest bırakmak için kullanılır. 'Sil', yeni kullanılarak ayrılan bir bellek parçasını serbest bırakmak için kullanılır.
S # 23) Bu koddaki sorun nedir?
T * p = yeni T (10);
p sil;
Cevap: Yukarıdaki kod sözdizimsel olarak doğrudur ve iyi bir şekilde derlenecektir.
Tek sorun, dizinin ilk elemanını silecek olmasıdır. Dizinin tamamı silinse de, yalnızca ilk elemanın yıkıcısı çağrılacak ve ilk elemanın belleği serbest bırakılacaktır.
S # 24) Bir dizideki nesnelerin yok edilme sırası nedir?
Cevap: Bir dizideki nesneler ters yapım sırasına göre yok edilir: İlk inşa edilir, son olarak yok edilir.
Aşağıdaki Örnekte, yıkıcıların sırası a (9), a (8),…, a (1), a (0) olacaktır:
voiduserCode() { Car a(10); ... }
İşaretçiler
S # 25) Bu koddaki sorun nedir?
T * p = 0;
p sil;
Cevap: Yukarıdaki kodda, işaretçi bir boş göstericidir. C ++ 03 standardına göre, bir NULL işaretçisinde delete işlevini çağırmak tamamen geçerlidir. Silme operatörü, NULL denetimini dahili olarak halleder.
S # 26) C ++ 'da Referans Değişken nedir?
Cevap: Referans değişken, mevcut değişken için bir takma addır. Bu, hem değişken adının hem de referans değişkeninin aynı bellek konumuna işaret ettiği anlamına gelir. Bu nedenle, değişken her güncellendiğinde referans da güncellenir.
Misal:
int a=10; int& b = a;
Burada b, a'nın referansıdır.
Depolama Sınıfları
S # 27) Depolama Sınıfı nedir? C ++ 'da Depolama Sınıflarından bahsedin.
Cevap: Depolama sınıfı, değişken veya işlevler gibi sembollerin ömrünü veya kapsamını belirler.
C ++ aşağıdaki depolama sınıflarını destekler:
- Oto
- Statik
- Harici
- Kayıt ol
- Değişebilir
S # 28) Mutable Storage sınıfı tanımlayıcısını açıklayın.
Cevap: Sabit bir sınıf nesnesinin üyesinin değişkeni değiştirilemez. Ancak değişkenleri “değiştirilebilir” olarak ilan ederek bu değişkenlerin değerlerini değiştirebiliriz.
S # 29) Otomatik anahtar kelime ne için?
Cevap: Varsayılan olarak, işlevin her yerel değişkeni otomatiktir, yani Oto . Aşağıdaki işlevde hem 'i' hem de 'j' değişkenleri otomatik değişkenlerdir.
void f() { int i; auto int j; }
NOT : Global değişken otomatik bir değişken değildir.
S # 30) Statik Değişken nedir?
Cevap: Statik değişken, işlev çağrıları boyunca değerini koruyan yerel bir değişkendir. Statik değişkenler 'statik' anahtar sözcüğü kullanılarak bildirilir. Statik olan sayısal değişkenlerin varsayılan değeri sıfırdır.
Üç kez çağrılırsa aşağıdaki işlev 1 2 3 yazdıracaktır.
void f() { static int i; ++i; printf(“%d “,i); }
Global bir değişken statikse, görünürlüğü aynı kaynak kodla sınırlıdır.
S # 31) Harici Depolama Tanımlayıcısının amacı nedir?
Cevap: 'Extern' tanımlayıcısı, global bir sembolün kapsamını çözmek için kullanılır.
#include using nam espace std; main() { extern int i; cout< Yukarıdaki kodda 'i' tanımlandığı dosyanın dışında görülebilir.
S # 32) Register Storage Specifier'ı açıklayın.
Cevap: Değişken her kullanıldığında “Register” değişkeni kullanılmalıdır. Bir değişken bir 'kayıt' belirticisi ile bildirildiğinde, derleyici, değişkenin aranmasını hızlandırmak için depolaması için CPU kaydı verir.
S # 33) Bir işlevde 'const' başvuru bağımsız değişkenleri ne zaman kullanılır?
Cevap: Bir işlevde 'const' referans bağımsız değişkenlerinin kullanılması birkaç yönden faydalıdır:
- 'Const', verileri değiştirebilecek programlama hatalarından korur.
- 'Const' kullanmanın bir sonucu olarak, işlev hem const hem de const olmayan gerçek bağımsız değişkenleri işleyebilir; bu, 'const' kullanılmadığında mümkün değildir.
- Sabit referansı kullanmak, işlevin uygun bir şekilde geçici bir değişken oluşturmasına ve kullanmasına izin verecektir.
Yapı ve Kullanıcı Tanımlı Veri Türleri
S # 34) Sınıf nedir?
Cevap: Sınıf, C ++ 'da kullanıcı tanımlı bir veri türüdür. Belirli bir problemi çözmek için yaratılabilir. Oluşturulduktan sonra, kullanıcının bir sınıfın çalışmasının ayrıntılarını bilmesi gerekmez.
Genel olarak, sınıf bir projenin bir planı olarak hareket eder ve bu parametreler üzerinde çalışan çeşitli parametreleri ve işlevleri veya eylemleri içerebilir. Bunlara sınıfın üyeleri denir.
S # 35) Sınıf ve Yapı arasındaki fark.
Cevap:
Yapısı: C dilinde yapı, farklı veri türlerini bir arada toplamak için kullanılır. Bir yapının içindeki değişkenlere yapının üyeleri denir. Bu üyeler varsayılan olarak geneldir ve yapı adı, ardından nokta operatörü ve ardından üye adı kullanılarak erişilebilir.
Sınıf: Sınıf, Yapının halefidir. C ++, yapı tanımını üyeleri üzerinde çalışan işlevleri içerecek şekilde genişletir. Varsayılan olarak, sınıfın içindeki tüm üyeler özeldir.
C ++ ile Nesne Tabanlı Programlama
Sınıflar, Yapıcılar, Yıkıcılar
S # 36) Ad Alanı nedir?
Cevap: Ad alanı, bir dizi genel sınıfı, nesneyi ve / veya işlevi belirli bir ad altında gruplamamıza olanak tanır.
Ad alanlarını kullanmanın genel biçimi şudur:
ad alanı tanımlayıcısı {namespace-body}
Tanımlayıcının herhangi bir geçerli tanımlayıcı olduğu ve ad alanı gövdesinin ad alanına dahil edilen sınıflar, nesneler ve işlevler kümesidir. Ad alanları, özellikle birden fazla nesnenin aynı ada sahip olma olasılığının olduğu ve bunun da ad çatışmalarıyla sonuçlandığı durumlarda kullanışlıdır.
S # 37) Beyanı 'kullanma' nın kullanımı nedir?
Cevap: Bildirimi kullanmak, kapsam çözümleme operatörü olmadan ad alanından bir ada başvurmak için kullanılır.
S # 38) İsim Mangling nedir?
Cevap: C ++ derleyicisi, işlev / yöntem içeren parametre türlerini benzersiz bir adla kodlar. Bu işleme ad değiştirme denir. Ters işleme demangling denir.
Misal:
A :: b (int, uzun) const karıştırılır 'B__C3Ail' .
Bir kurucu için yöntem adı dışarıda bırakılır.
Yani A :: A (int, uzun) const karıştırılır 'C3Ail'.
S # 39) Bir Nesne ile Sınıf arasındaki fark nedir?
Cevap: Sınıf, çözülmesi gereken bir proje veya problemin bir taslağıdır ve değişkenler ve yöntemlerden oluşur. Bunlara sınıfın üyeleri denir. Statik olarak bildirilmedikçe, sınıfın yöntemlerine veya değişkenlerine tek başına erişemeyiz.
Sınıf üyelerine erişmek ve onları kullanmak için, Nesne adı verilen bir sınıf örneği oluşturmalıyız. Sınıfın sınırsız bir ömrü varken, bir nesnenin yalnızca sınırlı bir ömrü vardır.
S # 40) C ++ 'daki çeşitli Erişim Tanımlayıcıları nelerdir?
Cevap: C ++ aşağıdaki erişim belirticilerini destekler:
- Halka açık: Veri üyeleri ve işlevlere sınıf dışında erişilebilir.
- Özel: Veri üyelerine ve işlevlere sınıf dışında erişilemez. Bunun istisnası, bir arkadaş sınıfının kullanılmasıdır.
- Korumalı: Veri üyelerine ve işlevlere yalnızca türetilmiş sınıflar tarafından erişilebilir.
Misal:
ÖZEL, KORUNAN ve KAMUYU farklılıkları ile birlikte tanımlayın ve örnekler verin.
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
S # 41) Yapıcı nedir ve nasıl adlandırılır?
Cevap: Yapıcı, sınıfla aynı adı taşıyan sınıfın üye işlevidir. Esas olarak sınıfın üyelerini başlatmak için kullanılır. Varsayılan olarak kurucular geneldir.
Kurucuların çağrılmasının iki yolu vardır:
- Örtük olarak: Oluşturucular, sınıfın bir nesnesi oluşturulduğunda derleyici tarafından örtük olarak çağrılır. Bu, bir Yığın üzerinde bir nesne oluşturur.
- Açık Arama: Bir sınıfın nesnesi new kullanılarak oluşturulduğunda, kurucular açıkça çağrılır. Bu genellikle bir Yığın üzerinde bir nesne oluşturur.
Misal:
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. }
S # 42) COPY CONSTRUCTOR nedir ve ne zaman denir?
Cevap: Kopya yapıcısı, parametresiyle aynı sınıftaki bir nesneyi kabul eden ve veri üyelerini atamanın sol kısmındaki nesneye kopyalayan bir yapıcıdır. Aynı sınıftan yeni bir nesne oluşturmamız gerektiğinde kullanışlıdır.
Misal:
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 }
S # 43) Varsayılan Yapıcı nedir?
Cevap: Varsayılan yapıcı, bağımsız değişkeni olmayan veya varsa, tümü varsayılan bağımsız değişkenler olan bir yapıcıdır.
Misal:
class B { public: B (int m = 0) : n (m) {} int n; }; int main(int argc, char *argv()) { B b; return 0; }
S # 44) Dönüşüm Oluşturucu nedir?
Cevap: Farklı türde bir argümanı kabul eden bir kurucudur. Dönüştürme kurucuları, esas olarak bir türden diğerine dönüştürme için kullanılır.
S # 45) Açık Oluşturucu nedir?
Cevap: Bir dönüşüm kurucusu, açık anahtar sözcükle bildirilir. Derleyici, türlerin örtük bir dönüşümünü uygulamak için açık bir oluşturucu kullanmaz. Amacı açıkça inşaat için ayrılmıştır.
S # 46) Bir sınıf üyesi değişkeni için Statik anahtar kelimenin rolü nedir?
Cevap: Statik üye değişkeni, ilgili sınıf için oluşturulan tüm nesneler arasında ortak bir bellek paylaşır. Bir nesne kullanarak statik üye değişkenine başvurmamıza gerek yoktur. Ancak, sınıf adının kendisi kullanılarak erişilebilir.
S # 47) Statik Üye İşlevini açıklayın.
Cevap: Statik bir üye işlevi, sınıfın yalnızca statik üye değişkenine erişebilir. Statik üye değişkenlerle aynı şekilde, bir statik üye fonksiyonuna sınıf adı kullanılarak da erişilebilir.
S # 48) Yerel nesnelerin yok edilme sırası nedir?
Cevap: Bir kod parçasını takip etmeyi düşünün:
Class A{ …. }; int main() { A a; A b; ... }
Ana işlevde, birbiri ardına oluşturulan iki nesnemiz var. Sırayla oluşturulurlar, önce a sonra b. Ancak bu nesneler silindiğinde veya kapsam dışına çıktıklarında, her biri için yıkıcı inşa edildikleri sıranın tersi sırada çağrılacaktır.
Bu nedenle, önce b'nin yıkıcısı, ardından a olarak adlandırılacaktır. Bir dizi nesneye sahip olsak bile, yaratılışlarının tersi sırayla aynı şekilde yok edilecekler.
Aşırı yükleme
S # 49) Fonksiyon Aşırı Yüklemesini ve Operatör Aşırı Yüklemesini açıklayın.
Cevap: C ++, 'birçok form' anlamına gelen OOP kavramı Polimorfizmi destekler.
C ++ 'da iki tür polimorfizmimiz vardır, yani Derleme zamanı polimorfizmi ve Çalışma zamanı polimorfizmi. Derleme zamanı polimorfizmi, bir Aşırı Yükleme tekniği kullanılarak elde edilir. Aşırı yükleme, temel anlamını sağlam tutarak bir varlığa ek anlam vermek anlamına gelir.
C ++ iki tür aşırı yüklemeyi destekler:
Fonksiyon Aşırı Yüklemesi:
Fonksiyon aşırı yükleme, programcının aynı isimde ancak farklı parametre listesine sahip birden fazla fonksiyona sahip olmasına izin veren bir tekniktir. Başka bir deyişle, işlevi farklı argümanlarla, yani argümanların türü, argümanların sayısı veya argümanların sırası ile aşırı yüklüyoruz.
Dönüş tipinde fonksiyon aşırı yüklemesi asla elde edilmez.
Operatör Aşırı Yüklemesi:
Bu, C ++ tarafından desteklenen başka bir derleme zamanı polimorfizmidir. Operatör aşırı yüklemesinde, bir operatör aşırı yüklenir, böylece kullanıcı tanımlı tiplerde ve standart veri tipinin işlenenleriyle çalışabilir. Ancak bunu yaparken, bu operatörün standart tanımı bozulmadan tutulur.
Örneğin, Sayısal veri türleri üzerinde çalışan bir toplama operatörü (+), karmaşık sayı sınıfının bir nesnesi gibi iki nesne üzerinde çalışmak üzere aşırı yüklenebilir.
S # 50) C ++ 'da Metot Aşırı Yüklemesi ile Metodu Geçersiz Kılma arasındaki fark nedir?
Cevap: Yöntem aşırı yüklemesi, aynı ada sahip ancak farklı bağımsız değişken listelerine sahip işlevlere sahip olmaktır. Bu, derleme zamanı çok biçimliliğinin bir biçimidir.
Bir temel sınıftan türetilen yöntemi yeniden yazdığımızda, yöntemi geçersiz kılma devreye girer. Yöntem geçersiz kılma, çalışma zamanı polimorfizmi veya sanal işlevlerle uğraşırken kullanılır.
S # 51) Kopya Oluşturucu ile Aşırı Yüklenmiş arasındaki fark nedir? Atama operatörü?
Cevap: Bir kopya oluşturucu ve aşırı yüklenmiş bir atama operatörü temelde aynı amaca hizmet eder, yani bir nesnenin içeriğini diğerine atamak. Ama yine de ikisi arasında bir fark var.
Misal:
complex c1,c2; c1=c2; //this is assignment complex c3=c2; //copy constructor
Yukarıdaki örnekte, ikinci c1 = c2 ifadesi aşırı yüklenmiş bir atama ifadesidir.
Burada, hem c1 hem de c2 zaten var olan nesnelerdir ve c2'nin içeriği c1 nesnesine atanmıştır. Bu nedenle, aşırı yüklenmiş atama ifadesi için her iki nesnenin de önceden yaratılmış olması gerekir.
Sonraki ifade, karmaşık c3 = c2, kopya yapıcısının bir örneğidir. Burada, c2'nin içeriği yeni bir c3 nesnesine atanır, bu da copy yapıcısının her çalıştırıldığında yeni bir nesne oluşturduğu anlamına gelir.
S # 52) Aşırı Yüklenemeyen Operatörleri adlandırın.
Cevap:
- sizeof - sizeof operatörü
- . - Nokta operatörü
- . * - referans alma operatörü
- -> - üye referans alma operatörü
- :: - kapsam çözümleme operatörü
- ?: - koşullu işleç
S # 53) Fonksiyon, bir değer veya referans olan parametreye göre aşırı yüklenebilir. İfadenin doğru olup olmadığını açıklayın.
Cevap: Yanlış. Her ikisi de, Değere göre geçiş ve referansla geçiş, arayanla aynı görünür.
S # 54) Operatör Aşırı Yüklemesinin faydaları nelerdir?
Cevap: Standart işleçleri bir sınıfa aşırı yükleyerek, bu işleçlerin anlamını genişletebiliriz, böylece diğer kullanıcı tanımlı nesneler üzerinde de çalışabilirler.
Fonksiyon aşırı yükleme, kodun karmaşıklığını azaltmamıza ve farklı argüman listeleri ile aynı fonksiyon isimlerine sahip olabileceğimiz için onu daha açık ve okunabilir hale getirmemize izin verir.
Miras
S # 55) Kalıtım nedir?
Cevap: Kalıtım, mevcut bir varlığın özelliklerini edinebileceğimiz ve ona daha fazla özellik ekleyerek yeni bir varlık oluşturabileceğimiz bir süreçtir.
C ++ açısından, miras, onu var olan bir sınıftan türeterek yeni bir sınıf yaratmaktır, böylece bu yeni sınıf, kendi sınıfının yanı sıra kendi ana sınıfının özelliklerine de sahip olur.
S # 56) Mirasın avantajları nelerdir?
Cevap: Kalıtım, kodun yeniden kullanılabilirliğine izin vererek kod geliştirmede zamandan tasarruf sağlar.
Kalıtım yoluyla, gelecekteki sorunları azaltan, hatasız, yüksek kaliteli bir yazılımdan yararlanıyoruz.
S # 57) C ++, Çok Düzeyli ve Çoklu Devralmaları destekliyor mu?
Cevap: Evet.
S # 58) Çoklu Devralma (sanal miras) nedir? Avantajları ve dezavantajları nelerdir?
Cevap: Çoklu miraslarda, türetilmiş bir sınıfın miras alabileceği birden fazla temel sınıfımız vardır. Bu nedenle, türetilmiş bir sınıf, birden fazla temel sınıfın özelliklerini ve özelliklerini alır.
Örneğin , Bir sınıf sürücü iki temel sınıfa sahip olacaktır: işçi ve bir kişi, çünkü bir sürücü bir çalışan olduğu kadar bir kişidir. Bu avantajlıdır çünkü sürücü sınıfı, çalışanın özelliklerini olduğu kadar kişi sınıfını da miras alabilir.
Ancak bir çalışan ve bir kişi söz konusu olduğunda, sınıfın bazı ortak özellikleri olacaktır. Ancak, sürücü sınıfı ortak özelliklerin miras alınması gereken sınıfları bilmeyeceğinden belirsiz bir durum ortaya çıkacaktır. Bu, çoklu mirasın en büyük dezavantajıdır.
S # 59) ISA ve HASA sınıf ilişkilerini açıklayın. Nasıl uygularsın her biri?
Cevap: 'ISA' ilişkisi, başka bir sınıfın 'ISA' sınıfı özelleşmiş versiyonunu ima ettiğinden, genellikle kalıtım sergiler. Örneğin , Çalışan ISA kişisi. Bu, Employee sınıfının Person sınıfından miras alındığı anlamına gelir.
'ISA' nın aksine, 'HASA' ilişkisi, bir varlığın üyesi olarak başka bir varlığa sahip olabileceğini veya bir sınıfın içinde gömülü başka bir nesneye sahip olabileceğini gösterir.
Dolayısıyla, bir Çalışan sınıfının aynı örneğini ele alırsak, Maaş sınıfını çalışanla ilişkilendirme şeklimiz, onu miras almakla değil, Employee sınıfına Salary nesnesini dahil etmek veya içermekle olur. 'HASA' ilişkisi en iyi sınırlama veya toplama yoluyla sergilenir.
S # 60) Türetilmiş bir sınıf miras alır mı yoksa miras almaz mı?
Cevap: Türetilmiş bir sınıf belirli bir temel sınıftan oluşturulduğunda, temel olarak temel sınıfın tüm özelliklerini ve sıradan üyelerini miras alır. Ancak bu kuralın bazı istisnaları vardır. Örneğin, türetilmiş bir sınıf, temel sınıfın yapıcılarını ve yıkıcılarını miras almaz.
Her sınıfın kendi kurucuları ve yıkıcıları vardır. Türetilmiş sınıf, temel sınıfın atama operatörünü ve sınıfın arkadaşlarını da miras almaz. Bunun nedeni, bu varlıkların belirli bir sınıfa özgü olmasıdır ve eğer başka bir sınıf türetilmişse veya o sınıfın arkadaşı ise, o zaman onlara aktarılamazlar.
Polimorfizm
S # 61) Polimorfizm nedir?
Cevap: Polimorfizmin arkasındaki temel fikir birçok biçimdedir. C ++ 'da iki tür Polimorfizmimiz vardır:
(i) Derleme zamanı Polimorfizmi
Derleme zamanı polimorfizminde, aşırı yükleyerek birçok forma ulaşırız. Dolayısıyla, bir Operatör aşırı yüklemesine ve işlev aşırı yüklemesine sahibiz. (Bunu zaten yukarıda ele aldık)
(ii) Çalışma Zamanı Polimorfizmi
Bu, sınıflar ve nesneler için polimorfizmdir. Genel fikir, temel bir sınıfın birkaç sınıf tarafından miras alınabileceğidir. Bir temel sınıf işaretçisi, alt sınıfını işaret edebilir ve bir temel sınıf dizisi, farklı alt sınıf nesnelerini depolayabilir.
Bu, bir nesnenin aynı işlev çağrısına farklı tepki verdiği anlamına gelir. Bu tür polimorfizm, sanal bir işlev mekanizması kullanabilir.
S # 62) Sanal İşlevler nedir?
Cevap: Bir sanal işlev, türetilmiş sınıfların temel sınıf tarafından sağlanan uygulamanın yerini almasına izin verir.
Türetilmiş sınıfın yanı sıra tabanda aynı ada sahip işlevlere sahip olduğumuzda, bir temel sınıf işaretçisi kullanarak alt sınıf nesnesine erişmeye çalıştığımızda bir belirsizlik ortaya çıkar. Bir temel sınıf işaretçisi kullandığımız için, çağrılan işlev aynı ada sahip temel sınıf işlevidir.
Bu belirsizliği düzeltmek için temel sınıftaki işlev prototipinden önce 'sanal' anahtar sözcüğünü kullanıyoruz. Başka bir deyişle, bu polimorfik işlevi Sanal hale getiriyoruz. Bir Sanal işlev kullanarak, belirsizliği kaldırabiliriz ve bir temel sınıf işaretçisi kullanarak tüm alt sınıf işlevlerine doğru bir şekilde erişebiliriz.
S # 63) Bir Çalışma Zamanı Polimorfizmi / Sanal İşlevler örneği verin.
Cevap:
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; coutYukarıdaki kodda, SHAPE sınıfı saf bir sanal işleve sahiptir ve soyut bir sınıftır (somutlaştırılamaz). Her sınıf, kendi yöntemiyle Draw () işlevini uygulayan SHAPE'den türetilir.
Ayrıca, her Draw işlevi sanaldır, böylece türetilmiş sınıfların (Circle ve SQUARE) nesnesiyle her seferinde bir temel sınıf (SHAPE) işaretçisi kullandığımızda, uygun Draw işlevleri çağrılır.
S # 64) Pure Virtual Functions derken neyi kastediyorsunuz?
Cevap: Saf Sanal Üye İşlevi, temel sınıfın türetilmiş sınıfları geçersiz kılmaya zorladığı bir üye işlevidir. Normalde bu üye işlevinin uygulaması yoktur. Saf sanal işlevler sıfıra eşittir.
Misal:
class Shape { public: virtual void draw() = 0; };
Üyesi olarak saf sanal işleve sahip temel sınıf, 'Soyut sınıf' olarak adlandırılabilir. Bu sınıf somutlaştırılamaz ve genellikle daha fazla uygulama ile birkaç alt sınıfı olan bir şablon görevi görür.
S # 65) Sanal Oluşturucular / Yıkıcılar nedir?
Cevap:
Sanal Yıkıcılar: Türetilmiş bir sınıf nesnesine işaret eden bir temel sınıf işaretçisi kullandığımızda ve onu yok etmek için kullandığımızda, türetilmiş sınıf yıkıcıyı çağırmak yerine, temel sınıf yıkıcı çağrılır.
Misal:
Class A{ …. ~A(); }; Class B:publicA{ … ~B(); }; B b; A a = &b; delete a;
Yukarıdaki örnekte gösterildiği gibi, delete a dediğimizde, yıkıcı çağrılır, ancak aslında temel sınıf yıkıcısıdır. Bu, b tarafından tutulan tüm belleğin düzgün bir şekilde temizlenemeyeceği belirsizliğine yol açar.
Bu problem “Virtual Destructor” konsepti kullanılarak çözülebilir.
Yaptığımız şey, temel sınıf kurucusunu 'Sanal' yapmaktır, böylece tüm alt sınıf yıkıcıları da sanal hale gelir ve türetilmiş sınıfın nesnesine işaret eden temel sınıf nesnesini sildiğimizde, uygun yıkıcı çağrılır ve tümü nesneler uygun şekilde silinir.
Bu, aşağıdaki şekilde gösterilmiştir:
yeni ürünler için nasıl test cihazı olunur
Class A{ …. virtual ~A(); }; Class B:publicA{ … ~B(); }; B b; A a = &b; delete a;
Sanal oluşturucu : Oluşturucular sanal olamaz. Bir kurucuyu sanal bir işlev olarak bildirmek bir sözdizimi hatasıdır.
Arkadaş
S # 66) Arkadaş işlevi nedir?
Cevap: C ++ sınıfı, özel ve korumalı üyelerine sınıfın dışından erişilmesine izin vermez. Ancak bu kural, ' Arkadaş ”İşlevi.
Adından da anlaşılacağı gibi arkadaş işlevi, sınıfın bir arkadaşı olan harici bir işlevdir. Arkadaş işlevinin sınıfın özel ve korumalı yöntemlerine erişmesi için, sınıfın içinde bulunan 'arkadaş' anahtar sözcüğünü içeren arkadaş işlevinin bir prototipine sahip olmamız gerekir.
S # 67) Arkadaşlık sınıfı nedir?
Cevap: Arkadaş sınıfları, iki sınıfın birbiriyle yakın bir şekilde çalışabilmesi için özel ve korumalı erişim belirleyicileri kuralını geçersiz kılmamız gerektiğinde kullanılır.
Bu nedenle, başka bir sınıfın arkadaşı olmak için bir arkadaş sınıfımız olabilir. Bu şekilde, arkadaş sınıfları özel, erişilemez şeyleri olduğu gibi tutabilir.
Bir sınıfın (özel üye) dahili uygulamasına, ayrıntıları herkese açık hale getirmeden erişme ihtiyacımız olduğunda, arkadaş işlevlerine gidiyoruz.
Gelişmiş C ++
Şablonlar
S # 68) Şablon nedir?
Cevap: Şablonlar, veri türünden bağımsız (genel) işlevler oluşturmaya izin verir ve işlevi tüm olası veri türleriyle aşırı yüklemeye gerek kalmadan herhangi bir veri türünü parametre ve dönüş değeri olarak alabilir. Şablonlar neredeyse bir makronun işlevselliğini yerine getirir.
Prototipi aşağıdakilerden herhangi biri:
şablon belirlemek > function_declaration;
şablon belirlemek > function_declaration;
Her iki prototip arasındaki tek fark, anahtar kelime sınıfı veya tür adı kullanımıdır. Genel olma temel işlevleri aynı kalır.
İstisna işleme
S # 69) İstisna İşleme nedir? C ++ İstisna İşlemeyi destekliyor mu?
Cevap: Evet C ++, istisna işlemeyi destekler.
Kodun her zaman normal şekilde çalışacağından emin olamayız. Yazdığımız kodu hatasız olsa bile arızaya zorlayabilecek belirli durumlar olabilir. Bu kod arızasına İstisna .
Bir istisna meydana geldiğinde, derleyici bir istisnanın meydana geldiğini bilmemiz için onu atmalıdır. Bir istisna atıldığında, derleyicinin, program akışının düzgün şekilde devam etmesi veya sona ermesi için uygun şekilde işlendiğinden emin olması gerekir. Bu denir bir istisnanın ele alınması.
Dolayısıyla C ++ 'da üç anahtar kelimemiz var, yani Deneyin , atmak ve yakalamak istisnai işlemlerdir.
İstisna bloğunun genel sözdizimi şöyledir:
try{ …. # Code that is potentially about to throw exception goes here …. throw exception; } catch(exception type) { … #code to handle exception goes here }
Yukarıda gösterildiği gibi, potansiyel olarak arızalanabilecek kod, try bloğunun altına yerleştirilir. Kod arızalandığında, bir istisna atılır. Bu istisna daha sonra catch bloğunun altına yakalanır ve işlenir, yani uygun önlem alınır.
S # 70) C ++ standart istisnaları hakkında yorum yapmak ister misiniz?
Cevap: C ++, kodu try bloğunun içine koyarsak yakalanabilecek bazı standart istisnaları destekler. Bu istisnalar temel sınıfın bir parçasıdır ' std :: istisna ”. Bu sınıf, C ++ başlık dosyasında tanımlanır.
Bu sınıf tarafından desteklenen birkaç İstisna Örneği şunları içerir:
bad_alloc - 'yeni' tarafından atılır
runtime_error - çalışma zamanı hataları için atılır
bad_typeid - türüne göre atılır
Standart Şablon Kitaplığına Giriş
S # 71) Standart Şablon Kitaplığı (STL) nedir? STL Konteynerlerinin çeşitli türleri nelerdir?
Cevap: Standart Şablon Kütüphanesi (STL), standart C ++ spesifikasyonuna dahil edilmek üzere ANSI komitesi tarafından onaylanan bir konteyner şablonları kütüphanesidir. Elemanları nasıl depoladıklarına bağlı olarak çeşitli STL konteynerlerimiz var.
- Sıra, Yığın - Bunlar geleneksel kuyruk ve yığınla aynıdır ve uyarlanabilir kaplar olarak adlandırılır.
- Ayarla, Harita - Bunlar temelde anahtar / değer çiftlerine sahip ve doğaları gereği ilişkisel olan kaplardır.
- Vektör ve - Bunlar doğaları gereği sıralıdır ve dizilere benzerlik gösterir.
S # 72) Yineleyici sınıfı nedir?
Cevap: C ++ 'da bir konteyner sınıfı, farklı nesnelerin bir koleksiyonudur.
Bu nesne koleksiyonundan geçmemiz gerekirse, bunu basit indeks değişkenleri kullanarak yapamayız. Bu nedenle, STL'de adında özel bir sınıfımız var. Yineleyici konteyner sınıfının içeriğinde gezinmek için kullanılabilecek sınıf.
Çeşitli yineleyici kategorileri şunları içerir: girdi yineleyiciler, çıktı yineleyiciler, ileri yineleyiciler, çift yönlü yineleyiciler, rastgele erişim vb.
S # 73) Harici Yineleyici ile Dahili Yineleyici arasındaki fark nedir? Harici Yineleyicinin bir avantajını açıklayın.
Cevap: Bir iç yineleyici, içinden geçilmesi gereken öğelere sahip sınıfın üye işlevleriyle gerçekleştirilir.
Harici bir yineleyici, içinden geçilecek öğelerin bulunduğu nesneye bağlanabilen ayrı bir sınıf olarak uygulanır. Harici yineleyicinin temel avantajı, ayrı bir sınıf olarak uygulandığı için uygulanmasının kolay olmasıdır.
İkinci olarak, farklı bir sınıf olduğu için birçok yineleyici nesnesi aynı anda etkin olabilir.
Daha fazla okuma => C # Mülakat Soruları
Sonuç
C ++ röportajının neredeyse tüm ana kodlama ve programlama konuları bu makalede ele alınmaktadır.
Bu röportaj sorularını kullanarak bir röportaj için hazırlandıktan sonra herhangi bir adayın rahatlayacağını umuyoruz.
Röportajınız için en iyisi !!
Önerilen Kaynaklar
- Mülakat Soruları ve Cevapları
- ETL Test Mülakat Soruları ve Cevapları
- Bazı Zor Manuel Test Soruları ve Cevapları
- 25 En İyi Çevik Test Mülakat Soruları ve Cevapları
- Spock Mülakat Soruları ve Cevapları (En Popüler)
- Bazı İlginç Yazılım Testi Görüşme Soruları
- En İyi 20+ .NET Mülakat Soruları ve Cevapları
- En İyi 32 Datastage Mülakat Soruları ve Cevapları