Programlamanın temel kavramları
1. int i = 1;
void main () {
inti = i; // i tanımlanmamış bir değerdir
}
2. Tür dönüştürme
C ++, yerleşik tip nesneler arasında bir dizi standart tuğla dönüşümünü tanımlar:
3. Operatör sorunu
1) işaretsiz karakter a = 0xA5;
unsignedchar b = ~ a > > 4 + 1;
cout < < b; // Sonuç 250, çünkü kayıt 16 bit
2) Bir X sayısının 2N'nin üssü olup olmadığını belirlemek için bir ifade kullanın, döngüler kullanılamaz
! (X (X-1))
3) Aşağıdaki kod:
dönüş (xy) + ((x ^ y) > > 1) (729.271) = 500
4) İki sayının daha büyük değerini bulun, aşağıdaki gibi yargılama ifadelerini kullanmadan
int max = ((a + b) + abs (a-b)) / 2
5) Herhangi bir ara değişken olmadan iki değer nasıl değiştirilir
a = a ^ b; b = a ^ b; a = a ^ b;
4. C ve C ++ arasındaki ilişki
1) Bir C ++ programında C derleyicisi tarafından derlenen bir işlevi çağırırken, neden extern "C" ekleyin
C ++, ad eşleştirme sorununu çözmek için C bağlantı değişiminde belirtilen sembolleri sağlar
2 ) Başlık dosyasında Ifndef / define / endif
Başlık dosyasının tekrar tekrar alıntılanmasını önleyin
Ön işleme, const ve sizeof
1. Makro tanımı
1) Yapı yapısına göre bir yapı yapısındaki bir değişkenin ofsetini bulmak için FIND'ı tanımlamak için bir makro kullanın:
#defineFIND (struc, e) (size_t) (((struc *) 0) - > e
İşaretçiler ve referanslar
1, A sınıfı {public: int a; A () {a = 1;} void print () {cout < < a;};
B sınıfı: genel A {genel: int a; B () {a = 2;}};
B b; b. Baskı (); cout < < b.a; // Sonuç 12
2. İşlev göstergesi
1) float (** def) def ikincil bir göstericidir, tek boyutlu bir diziye bir işaretçiye işaret eder ve dizi öğesi bir kayan nokta
2) çift * (* gh) gh bir göstericidir, tek boyutlu bir diziyi gösterir, dizi elemanlarının hepsi çifttir *
3) çift (* f) () Bir dizi işlev işaretçisi, f bir dizidir ve öğeler işlevlere işaretçilerdir
4) int * ((* b)) Tek boyutlu diziye işaretçi
5) Uzun (* eğlenceli) (int) İşlev işaretçisi
6) Int (* (* F) (int, int)) (int) F bir işlev göstericisidir, işaret edilen işlevin türü iki int parametresi olan ve bir işlev işaretçisi döndüren bir işlevdir ve döndürülen işlev işaretçisi, int parametresi olan bir işlevi işaret eder ve bir int döndürür
7) int (* ptr) Tamsayı dizisine işaretçi
8) int * ptr İşaretçi dizisi
9) int (* a) (int) 10 işaretçiye sahip bir dizi, işaretçi bir işlevi gösterir, işlevin bir tamsayı parametresi vardır ve bir tamsayı değeri döndürür
3. İşaretçi dizisi ve dizi işaretçisi
1) int a = {1,2,3,4,5}
int * ptr = (int *) (a + 1) // a + 1 dizinin arkasını işaret eder
cout < < * (ptr-1); // Çıktı 5
2) Malloc / free ile C ++ 'da, neden yeni / silmeye ihtiyacımız var?
Dahili olmayan veri türlerinin nesneleri için, malloc / free tek başına dinamik nesnelerin gereksinimlerini karşılayamaz. Nesne, oluşturulduğunda kurucuyu otomatik olarak yürütmelidir ve nesne ölmeden önce yıkıcıyı otomatik olarak yürütmelidir. Malloc / free bir operatörden ziyade bir kütüphane işlevi olduğundan, derleyicinin kontrolü dahilinde değildir ve kurucuyu ve yıkıcıyı yürütme görevi malloc / free üzerine empoze edilemez. Bu nedenle, C ++ dili, dinamik bellek ayırma ve başlatmayı tamamlayabilen yeni bir operatöre ve hafızanın temizlenmesini ve serbest bırakılmasını tamamlayabilen bir operatör silme işlemine ihtiyaç duyar. Yeni ve silme, kitaplık işlevleri değil, operatörlerdir
4. İşaretçiler ve tutamaçlar
1) Tutamak ve işaretçi arasındaki fark ve bağlantı nedir?
Tutamaç, işaretçi için bir işaretçidir
Sap ve işaretçi aslında tamamen farklı iki kavramdır. Windows sistemi, sistem bilgilerini gizlemek için sistem kaynaklarını tutamaçlarla işaretler. Sadece bu şeyin olduğunu bilmeniz ve sonra onu çağırmanız gerekir, bu 32 bitlik bir birimdir. İşaretçi fiziksel bir bellek adresini işaretler, ikisi farklı kavramlardır
STL şablonu ve kapsayıcı
1. Genel programlama
1) Genel programlama nedir?
STL, tutarlı bir şekilde programlamanın mümkün olduğu anlamına gelir. C ++ ile programlamaya çalışmak değil, yazılımla başa çıkmanın doğru bir yolunu bulmaya, fikirlerimizi ifade edebilecek bir dil bulmaya çalışmaktır. Genel programlama, verimli bir algoritmanın en soyut temsilini keşfetmeye, yani algoritmadan başlayarak ve verimli çalışmasını sağlayacak en genel gerekli koşullar kümesini bulmaya dayanan bir programlama yöntemidir ve bu gerekli koşulların birçok türü vardır. Farklı uygulamalar.
Kalıtım ve arayüz
1. Aşağıdaki kodun çıktısı nedir?
sınıfA {korumalı: int m_data; genel: A (intdata = 0) {m_data = veri;
intGetData () {return doGetData ();} sanal int doGetData () {return m_data;}};
sınıf B: genel A {korumalı: int m_data; genel: B (int veri = 1) {m_data = veri;
intdoGetData () {dönüş m_data;}};
classC: public B {korumalı: int m_data; public: C (int data = 2) {m_data = data;}}
c.GetData () - C tanımlı değil, B çağrısı, B tanımsız, A çağrısı. A sanaldır, B'yi ara
c.A :: GetData () -A sanal, C tanımlı değil, B'yi ara
c.A :: doGetData () -Doğrudan A'yı arayın
2. Üç kalıtım yöntemi
Kamu mirası: Temel sınıfın public ve korumalı üyeleri görünürdür.Temel sınıfın public ve korumalı üyeleri türetilmiş bir sınıfın üyeleri olduğunda, orijinal durumlarında kalırlar; temel sınıfın özel üyeleri görünmezdir ve temel sınıfın özel üyeleri hala özeldir. . Genel kalıtımda, türetilmiş sınıfın nesneleri temel sınıftaki genel üyelere erişebilir ve türetilmiş sınıfın üye işlevleri, temel sınıfın genel üyelerine ve korumalı üyelerine erişebilir.
Özel miras: Temel sınıfın ortak üyeleri ve korumalı üyeleri, türetilmiş sınıfın özel üyeleri olarak kabul edilir ve bu türetilmiş sınıfın alt sınıfları tarafından erişilemez.
Mirası koruyun: Temel sınıfın genel üyeleri ve korumalı üyeleri, türetilmiş sınıfın korumalı üyeleridir.
misal: sınıf Üst {genel: Üst (intvar = -1) {m_nPub = var; m_nptd = var; m_nptr = var;}
public: int m_nPub; korumalı: int m_nptd; özel: int m_nPtr;};
classChild1: public Üst {genel: int GetPub () {dönüş m_nPub;};
int GetPtd () {dönüş m_nPtd;}; int GetPtr () {dönüş m_nPtr; };};
classChild2: korumalı Üst {public: int GetPub () {return m_nPub;};
int GetPtd () {dönüş m_nPtd;}; int GetPtr () {dönüş m_nPtr; };};
classChild3: özel Üst {genel: int GetPub () {dönüş m_nPub;};
int GetPtd () {dönüş m_nPtd;}; int GetPtr () {dönüş m_nPtr; };};
Child1cd1; Child2 cd2; Child3 cd3; int nVar = 0;
cd1.m_nPub = nVar;
cd1.m_nPub = nVar; // Üst sınıf, genel miras alınan türetilmiş sınıf nesneleri tarafından erişilebilen ancak değiştirilemeyen değişkenleri korur
nVar = cd1.GetPtd ();
cd2.m_nPub = nVar; / / Miras alınan türetilmiş sınıf nesnelerini koru, üst sınıfın genel değişkenlerini doğrudan değiştiremez
nVar = cd2.GetPtd ();
cd3.m_nPub = nVar;
nVar = cd3.GetPtd (); // Özel olarak miras alınan türetilmiş sınıf nesneleri, işlevler aracılığıyla üst sınıfın korumalı değişkenlerine erişebilir
Bit işlemi ve gömülü programlama
1. Bir konsorsiyum kurmak için yürütülen programın sonucu nedir?
birlik {karakter a; int i;} u; u.i = 0xf0f1f2f3;
cout < < altıgen < < u.i; // f0f1f2f3
cout < < altıgen < < int (u.a); // F3 belleğindeki düşük veri baytı düşük adreste saklanır ve verilerin adresi düşük adresle temsil edilir.
2. Programın sonuçlarını yazın
int * pa = NULL; int * pb = pa + 15;
printf ("% x", pb); // 15 * 4 = 60, 60'ın onaltılık sonucu 3C'dir
3. Gömülü programlama
Kesinti servis rutini (ISR): ISR bir değeri tersine çeviremez; ISR parametreleri iletemez; ISR kısa ve verimli olmalıdır. ISR'de kayan nokta işlemleri yapmak akıllıca değildir; printf () genellikle ISR'de kullanılmaz.
4. Uçucu anahtar kelimesinin anlamı nedir? Bir parametre hem sabit hem de değişken olabilir mi? İşaretçiler değişken olabilir mi?
Uçucu olarak tanımlanan bir değişken, değişkenin beklenmedik bir şekilde değiştirilebileceği anlamına gelir.Bu şekilde, derleyici bu değişkenin değerini üstlenmez.Eniyileyici, değişkeni her kullanıldığında dikkatlice yeniden okumalıdır. Kayıt defterinde depolanan yedeği kullanmak yerine.
Hem sabit hem de uçucu olabilir, bir örnek salt okunur bir kayıttır
Bir işaretçi olabilir.Bir örnek, bir terminal hizmeti alt yordamının bir işaretçiyi arabelleğe değiştirmesidir.
5. Mutlak bir adres değeri ayarlayın
Int * ptr; ptr = (int *) 0x67a9; * ptr = 0xaa55;
6. işaretsiz int compzero = 0xFFFF; // Bu yanlış, işaretsiz int compzero = ~ 0 olarak değiştirilmelidir;
7. char * ptr; if ((ptr = (char *) malloc (0)) == NULL) cout < < "Null"; else cout < < "Geçerli"; //Geçerli
8. Little-endian sisteminde, bu C programının sonucu nedir?
structbitstruct {int b1: 5; int: 2; int b2: 2;} bit yapısı;
bitstructb; memcpy (b, "EMC İNCELEME", sizeof (b)); cout < < b.b1 < < b.b2;
E ve M'nin ASCII değerleri 0x45 ve 0x4D, 1010001010110010, bit yapısı 9 bit ve bellekteki b şu şekildedir: 101000101, b15 bit kaplar: 10100, orta iki bit 01'i atlar. Sonuç 5 ve- 2
Tasarım modelleri ve yazılım testi
1. Tasarım desenleri açısından tavuğu veya yumurtayı tanımlayın.
Tavuk mu yumurtanın mı olduğu sorusu, sadece nesne yönelimli olmanın doğasına dair bir anlayıştır ve burada anlamak için insanın doğal dilini koymak uygun değildir. Büyük bir tavuk ve yumurta sorunu yoktur, ancak tür ve değer sorunu ve işaretçi referansı sorunu, çünkü tavuk ve yumurta arasındaki ilişki bir sınırlama ilişkisinden çok bir referans ilişkisidir.
2. Boya kalemleri ve fırçalar arasındaki farkı tanımlamak için tasarım desenlerini kullanın
Bu bir Köprü modudur. Bir resim için 36 farklı modelden boya kalemi hazırlamanız gerekir ve 3 fırça kalemi yeterlidir. Bu mod sayesinde, çarpma toplamaya dönüştürülebilir. Bu modelin amacı, ikisinin bağımsız olarak değiştirilebilmesi için, soyutlamanın ve taze çiçeklerin köklerinden kurtulmaktır. Köprü modu, miras ilişkisini bir kombinasyon ilişkisine dönüştürür, böylece sistemler arasındaki bağlantıyı azaltır.
3. Gözlemci modu
Gözlemci modeli, birden çok gözlemci nesnesinin yardım için belirli bir konuyu eşzamanlı olarak izlemesine izin veren bire çok bağımlılık ilişkisini tanımlar. Bu yardımcı nesnenin durumu değiştiğinde, tüm gözlemci nesnelere kendilerini otomatik olarak güncelleyebilmeleri için bildirimde bulunacaktır.
4. Yazılım testi
Test edilecek ürünün özelliklerini ve ana fonksiyonel modüllerini içerebilir, test edilmesi gereken fonksiyonel noktaları listeleyebilir ve odağı gösterebilir; test stratejileri ve kayıtları; test kaynak tahsisi.
İşlevsel test, temel olarak, ürünün talep tasarımının gerekliliklerini karşılayıp karşılamadığını doğrulamak için test uzmanları tarafından gerçekleştirilen bir kara kutu testidir; kullanılabilirlik testi, temel olarak, kullanışlılık ve verimlilik dahil olmak üzere ürünün kullanılabilirliğini test etmek için kullanıcılar tarafından yapılan bir testtir. Ve kullanıcı öznel memnuniyeti. Bunların arasında etkinlik, kullanıcıların belirli görevleri tamamlarken ve belirli hedeflere ulaşırken sahip oldukları doğruluk ve eksiksizliği ifade eder; verimlilik, görevleri tamamlarken kullanıcılar tarafından kullanılan kaynakların doğruluğu ve eksiksizliği arasındaki oranı ifade eder; memnuniyet, kullanıcının ürünü kullanma sürecindeki deneyimini ifade eder. Öznel memnuniyet ve kabul