一、C語言中meset與mecopy
memset原型:extern void *memset(void *buffer, int c, int count);
memset用來對一段內(nèi)存空間全部設(shè)置為某個字符,一般用在對定義的字符串進(jìn)行初始化為‘ ’或‘\0’;(例中:將某塊內(nèi)存 buffer中當(dāng)前位置后面的count 個字節(jié)用 用c 替換并返回指針指向的buffer)例:
char a[100];
memset(a, '\0', sizeof(a));
memcpy原型:extern void *memcpy(void *dest, void *src, unsigned int count);
用法:#include <string.h>功能:由src所指內(nèi)存區(qū)域復(fù)制count個字節(jié)到dest所指內(nèi)存區(qū)域。說明:src和dest所指內(nèi)存區(qū)域不能重疊,函數(shù)返回指向dest的指針。
memcpy用來做內(nèi)存拷貝,你可以拿它拷貝任何數(shù)據(jù)類型的對象,可以指定拷貝的數(shù)據(jù)長度;例:
char a[100],b[50];
memcpy(b, a, sizeof(b));//copy a 的大小為b內(nèi)存大小的字節(jié)到b(a->b)
注意如用sizeof(a),會造成b的內(nèi)存地址溢出。
二、C語言中符號->
用法
三、C語言中的main函數(shù)的兩個參數(shù)各表達(dá)什么意思
int main (int argc, char* argv[])
{
return **;
}
C語言規(guī)定:argc(第一個形參)必須是整形變量,argv(第二個形參)必須是指向字符串的指針數(shù)組
三、C++::
與:
表現(xiàn)
雙冒號 :: 操作符被稱為域操作符(scope operator),含義和用法如下:
1.在類外部聲明成員函數(shù)。void Point::Area(){};
2.調(diào)用全局函數(shù);表示引用成員函數(shù)變量及作用域,作用域成員運(yùn)算符 例:System::Math::Sqrt() 相當(dāng)于System.Math.Sqrt()。
3.調(diào)用類的靜態(tài)方法: 如:CDisplay::display()。
把域看作是一個可視窗口全局域的對象在它被定義的整個文件里,一直到文件末尾都是可見的。在一個函數(shù)內(nèi)被定義的對象是局域的(local scope), 它只在定義其的函數(shù)體內(nèi)可見。每個類維持一個域,在這個域之外 ,它的成員是不可見的。類域操作符告訴編譯器后面的標(biāo)識符可在該類的范圍內(nèi)被找到。
四、C語言多態(tài)表現(xiàn)形式之虛函數(shù)Virtual
Virtual是C++ OO機(jī)制中很重要的一個關(guān)鍵字。只要是學(xué)過C++的人都知道在類Base中加了Virtual關(guān)鍵字的函數(shù)就是虛擬函數(shù)(例如函數(shù)print),于是在Base的派生類Derived中就可以通過重寫虛擬函數(shù)來實(shí)現(xiàn)對基類虛擬函數(shù)的覆蓋。當(dāng)基類Base的指針point指向派生類Derived的對象時,對point的print函數(shù)的調(diào)用實(shí)際上是調(diào)用了Derived的print函數(shù)而不是Base的print函數(shù)。這是面向?qū)ο笾械亩鄳B(tài)性的體現(xiàn)。(關(guān)于虛擬機(jī)制是如何實(shí)現(xiàn)的,參見Inside the C++ Object Model ,Addison Wesley 1996)
class Base
{
public:Base(){}
public:
virtual void print(){cout<<"Base";}
};
class Derived:public Base
{
public:Derived(){}
public:
void print(){cout<<"Derived";}
};
int main()
{
Base *point=new Derived();
point->print();
}
Output:
Derived
這也許會使人聯(lián)想到函數(shù)的重載,但稍加對比就會發(fā)現(xiàn)兩者是完全不同的:
(1) 重載的幾個函數(shù)必須在同一個類中;
覆蓋的函數(shù)必須在有繼承關(guān)系的不同的類中
(2) 覆蓋的幾個函數(shù)必須函數(shù)名、參數(shù)、返回值都相同;
重載的函數(shù)必須函數(shù)名相同,參數(shù)不同。參數(shù)不同的目的就是為了在函數(shù)調(diào)用的時候編譯器能夠通過參數(shù)來判斷程序是在調(diào)用的哪個函數(shù)。這也就很自然地解釋了為什么函數(shù)不能通過返回值不同來重載,因?yàn)槌绦蛟谡{(diào)用函數(shù)時很有可能不關(guān)心返回值,編譯器就無法從代碼中看出程序在調(diào)用的是哪個函數(shù)了。
(3) 覆蓋的函數(shù)前必須加關(guān)鍵字Virtual;
重載和Virtual沒有任何瓜葛,加不加都不影響重載的運(yùn)作