1. 1 silent is gold gongzi
  2. 2 dear,thats not love LiFanyi
  3. 3 说好不哭 Jay
  4. 4 meet SunYanzi
  5. 5 someone like me MaoBuyi
  6. 6 anhe brige yuxi
  7. 7 snail jay
  8. 8 poems wrote by my father xufei
  9. 9 chendu zhaolei
  10. 10 if love is destined Lijian
  11. 11 poems wrote by my father Lijian
  12. 12 see you again lmg
  13. 13 Viva La Vida coldplay
silent is gold - gongzi
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

CPP入门

数组的定义和初始化

静态 int array[100]; //定义了数组,但是未进行初始化

静态 int array[100]={1,2}; //定义并初始化了数组,除前两个其余为默认值0

动态 int* array = new int[100]; 分配了长度为100的数组

动态 int* array = new int[100](1,2); 为长度为100的数组array初始化前两个元素

字符串

C风格字符串

C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持。字符串实际上是使用 null 字符 \0 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。

下面的声明和初始化创建了一个 RUNOOB 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 RUNOOB 的字符数多一个。

1
char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'};

依据数组初始化规则,您可以把上面的语句写成以下语句:

1
char site[] = "RUNOOB";

C++ 中的 String 类

1
2
#include <string>
string str = "runoob";

指针

&var 表示取var的地址

*var 访问指针中地址的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>

using namespace std;

int main ()
{
int var = 20; // 实际变量的声明
int *ip; // 指针变量的声明

ip = &var; // 在指针变量中存储 var 的地址

cout << "Value of var variable: ";
cout << var << endl;

// 输出在指针变量中存储的地址
cout << "Address stored in ip variable: ";
cout << ip << endl;

// 访问指针中地址的值
cout << "Value of *ip variable: ";
cout << *ip << endl;

return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

1
2
3
Value of var variable: 20
Address stored in ip variable: 0xbfc601ac
Value of *ip variable: 20

指针和引用

引用:为对象起了另外一个名字。必须初始化。引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起。引用不是对象,没有实际地址,所以不能定义指向引用的指针。

指针:与引用一样,可以实现对其他对象的间接访问。不同点:a.指针本身是一个对象,允许对指针赋值和拷贝,指针在其生命周期内可以先后指向不同的对象。b.指针无须再定义时赋初值。

Const

顶层const:表示指针本身是一个常量,更一般的,顶层const可以表示任意的对象是常量(不限于指针)

底层const:表示指针所指对象是一个常量(限指针和引用等复合类型)

int *const p1 = &i; //从右往左看,p是一个常量,指向一个整型,可称为常量指针,是一个顶层const

const int p2 = &ci; //从右往左看,p2是一个指针,指向一个const int也即常量,可称为指针常量(同int const p2)是一个低层const

const int ci = 42; //顶层const

const成员函数(P231)

默认情况下,this的类型非常量的常量指针,如:Sales_data * const this

但是,我们不能将this绑定到一个常量对象上:

this = &常量对象 是不行的,因为常量对象的值不能够更改,而this指向对象的值是可修改的,这样会出大问题。

因此,要在一个常量对象上调用普通的成员函数是不行的,我们使用常量成员函数。func(…) const{。。。}类型,const用来表明this的类型是const Sales_data * const this this是一个指向常量对象的常量指针,所指对象的值及this本身的值(地址)都不能修改。

总结:常量成员函数 (const member function), 可读取类中的数据成员,但不能修改。

问题

1.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int main(){
int i=0;
const int cp = i;
cout<<cp<<endl;
i=1;
cout<<cp<<endl;
return 0;
}
//输出 0 0 因为用i的值来初始化了常量cp,后续i的值改变对cp没有影响

int main(){
int i=0;
const int * cp = &i;
cout<<*cp<<endl;
i=1;
cout<<*cp<<endl;
return 0;
}
//输出 0 1 指针的话,cp指向i的地址,i的值改变会引起cp的值改变

int main(){
int i=0;
const int &cp = i;
cout<<cp<<endl;
i=1;
cout<<cp<<endl;
return 0;
}
//输出 0 1 cp是i的别名

2.数组作为函数形参

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void func1(const int is[10]){
for(int i=0;i!=10;i++){
cout<<is[i]<<endl;
}
}
void func2(const int (&is)[10]){
for(int i=0;i!=10;i++){
cout<<is[i]<<endl;
}
}

int main(){
int a[] = {1,1,1,1,1,1,1,1,1,1,3};
func1(a);//正确,
func2(a);//错误,类型不匹配,只能接收长度为10的数组
return 0;
}

3.返回