C++基礎知識筆記(1)

iteye_8379發表於2010-12-21
1. sizeof操作符 與 strlen()函式的區別:
#include <iostream>
#include <cstring>
using namespace std;

int main() {
int p1[5] = {1,2,3,4,5};
char p2[20] = "hello world!";

cout << sizeof(p1) << endl;
cout << sizeof(p2) << '\t' << strlen(p2) << endl;
return 0;
}

輸出為:20
20 12
總結:(1)sizeof操作符指出整個陣列的長度,但strlen()函式返回的是儲存在陣列中的字串的長度。
(2)strlen()函式只能用於儲存字串的陣列(即char陣列),否則編譯器會報錯


2. string類與char[]陣列的區別:
#include <iostream>
#include <cstring>
#include <string>
using namespace std;

int main() {
char p1[30] = "hello world!";
string s1 = "hello world!";

cout << strlen(p1) << endl;
cout << s1.size() << endl;
return 0;
}

輸出為:12
12
總結:函式size()的功能與strlen()基本相同,但句法不同:s1不是作為函式引數,而是位於函式名之前,它們之間用句點連線.表明,s1是一個物件,而size()是一個類方法.


3. C++中的結構簡介:
#include <iostream>
#include <cstring>
#include <string>
using namespace std;

struct Test {
private:
int i;
string s ;

public:
void setIValue(int i);
int getIValue();

void setSValue(string s);
string getSValue();

void HW();

};

void Test::setIValue(int i) {
Test::i = i;

}

int Test::getIValue() {
return Test::i;
}

void Test::setSValue(string s) {
Test::s = s;
}

string Test::getSValue() {
return Test::s;
}

void Test::HW() {
for (int j=0; j<getIValue(); j++) {
cout << getSValue() << endl;
}
}

int main() {

Test test;
test.setIValue(2);
test.setSValue("hello world!");
test.HW();

return 0;
}

輸出為:hello world!
hello world!
總結:在C++中,類和結構之後記得加“;”號.結構和類的用法幾乎完全一致,但是結構中的變數和函式預設都為public.另外,在結構中,不能直接初始化其中的變數.
#include <iostream>
#include <cstring>
#include <string>
using namespace std;

struct Test {
string name;
int age;
char sex;

void hello();
};

void Test::hello() {
cout << "hello " << name << endl;
}

int main() {
/*
Test test = {
"chris",
24,
'm'
};


cout << test.name << endl << test.age << endl << test.sex << endl;
*/

Test test1[2] =
{
{"chris", 24, 'm'},
{"harry", 23, 'f'}

};

for(int i=0; i<2; i++) {
cout << test1[i].name << endl << test1[i].age << endl << test1[i].sex << endl;
test1[i].hello();
}

return 0;
}

輸出為:
chris
24
m
hello chris
harry
23
f
hello harry
總結:可像以上程式碼一樣初始化結構中的變數.


4. 列舉:
#include <iostream>
#include <cstring>
#include <string>

using namespace std;


int main() {
enum color {red, blue, green, yellow};
cout << red << '\t' << blue << '\t' << green << '\t' << yellow << endl;

enum number {first, second=100, third=125, fourth=125, fifth, sixth};
cout << first << '\t' << second << '\t' << third << '\t' << fourth << '\t' << fifth << '\t' << sixth << endl;

color myFlag1,myFlag2;
myFlag1 = color(2);
cout << myFlag1 << endl;
myFlag2 = color(5);
cout << myFlag2 << endl;

return 0;
}

輸出為:
0 1 2 3
0 100 125 125 126 127
2
5
總結:熟悉列舉的使用規則.


5 指標和數字:
#include <iostream>
#include <cstring>
#include <string>

using namespace std;


int main() {

int num = 5;
int *p1, *p2;

p1 = &num;
p2 = new int;

*p2 = 6;

cout << *p1 << '\t' << p1 << endl;
cout << *p2 << '\t' << p2 << endl;

delete p2;

cout << *p2 << '\t' << p2 << endl;

return 0;
}

輸出為:
5 0xbfc91268
6 0x9fc5008
0 0x9fc5008


6. 使用new來建立動態陣列:
在編譯時給陣列分配記憶體被稱為靜態聯編,意味著陣列是在編譯時加入到程式中的;但使用new時,如果在執行階段需要陣列,則建立它;如果不需要,則不建立.還可以在程式執行時選擇陣列的長度.這被稱為動態聯編,意味著陣列是在程式執行時建立的.這種陣列叫做動態陣列.使用靜態聯編時,必須在編寫程式時指定陣列的長度;使用動態聯編時,程式將在執行時確定陣列的長度.
#include <iostream>
#include <cstring>
#include <string>

using namespace std;


int main() {

int* pt = new int[5];
for(int i=0; i<5; i++) {
pt[i] = i;
}

for(int j=0; j<5; j++) {
cout << *(pt+j) << endl;
}

delete [] pt;

return 0;
}

輸出為:
0
1
2
3
4


7. 二維陣列:
#include <iostream>
#include <cstring>
#include <string>

using namespace std;


int main() {

int numArray[3][4] = {{1,2,3,4},{2,3,4,5},{3,4,5,6}};

for(int i=0; i<3; i++) {
for(int j=0; j<4; j++) {
cout << numArray[i][j] << '\t';
}
cout << endl;
}

return 0;
}

輸出為:
1 2 3 4
2 3 4 5
3 4 5 6

相關文章