又是一门新语言。课程安排几个编程语言都是有目的性的,比如学习shell是为了查看配置文件的方便,学习汇编是为了更加了解C编译过程中符号的使用。这次学习C++就是为学习Qt打基础的。
今天的课程重点是讲解C++和C语言的区别,从输出helloworld开始。
1 #include<iostream> 2 2 using namespace std; 3 3 4 4 int main() 5 5 { 6 6 cout << "hello world !"<< endl; 7 7 8 8 }
C++使用输入输出流,包含头文件<iostream>注意这里不加.h 。 std 是一个命名空间,不同的命名空间可以有相同的类名被定义 ..
using namespace std;就是指明下面的程序使用std,如果不用这句指明的话就要用std::string(string是std空间中定义的也可以在全局空间中定义,只要名字空间不一样即可.否则可以默认名字空间中有std.便不用std::来修饰 它是C++新标准中有的,解决多人作编大程序时名字冲突问题。比如A B两个班都有叫张三的人,你要使用A班的张三,必然要先指名是A班这个名字空间(namespace),然后你对张三的所有命令才能达到你的预想,不会叫错人.(摘自百度知道)
endl表示换行。
第二个代码是C++中内存分配和释放。
1 #include<iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 int *p = new int[5]; 8 p[1] = 9; 9 cout << p[1] << endl; 10 delete [] p; 11 12 }
和C相比较,new和malloc( )对应,delete 和 free()对应。共同点是都是在堆中分配内存,不同的是malloc()和free()是C库函数,new和delete是c++关键字。
第三个代码是引用的介绍:
1 #include<iostream> 2 2 using namespace std; 3 3 int hello(int &p); 4 4 5 5 int main() 6 6 { 7 7 int a = 10; 8 8 hello(a); 9 9 cout << a<< endl; 10 10 11 11 } 12 12 int hello(int &p){ 13 13 14 14 p = 1000; 15 15 16 16 }
引用是为原来的变量起别名,它和指针的区别是,指针是新分配一段内存空间,而引用为分配空间。定义指针时候可以不要初始化,而引用必须初始化。
第四个代码是C++中类的介绍:
1 #include<iostream> 2 2 using namespace std; 3 3 4 4 class person{ 5 5 public: 6 6 void show(int ); 7 7 int age; 8 8 private: 9 9 int money;//成员函数用 10 10 }; 11 11 void person::show(int m){ 12 12 money = m; 13 13 cout << money << endl; 14 14 } 15 15 16 16 int main() 17 17 { 18 18 person tom; 19 19 tom.age = 21; 20 20 tom.show(100);//对象只能访问类共有成员 21 21 // tom.money = 1000;//error//私有的对象不能用 22 22 23 23 24 24 }
class 和 struct 只有一点不相同。struct默认成员是共有的,class默认成员是私有的。
第五个函数是C函数,为了引出this指针:
1 #include<stdlib.h> 2 #include<stdio.h> 3 4 struct person{ 5 int age; 6 void (*init_person)(struct person *t); 7 void (*exit_person)(struct person *t); 8 void (*show)(struct person *t); 9 10 }; 11 void my_init_person(struct person *t); 12 void my_exit_person(struct person *t); 13 void my_show(struct person *t); 14 int main() 15 { 16 struct person tom; 17 tom.init_person = my_init_person; 18 tom.exit_person = my_exit_person; 19 tom.age = 10; 20 tom.show = my_show; 21 tom.init_person(); 22 tom.show(&tom); 23 tom.exit_person(); 24 25 26 } 27 void my_show(struct person *t) 28 { 29 printf("%d\n",t.age); 30 } 31 void my_init_person(struct person *t) 32 { 33 } 34 void my_exit_person(struct person *t) 35 { 36 37 }
C++代码和C代码是可以互相转换的,为了在show函数中使用person中的age,特地定义重新定义一个指向person的结构体指针。在C++中被称为this指针。而且每个类的成员函数的第一个参数默认就是this指针。
第六个函数是对析构函数和构造函数的介绍:
1 #include<iostream> 2 #include<stdio.h> 3 4 using namespace std; 5 6 class person{ 7 public: 8 person(int ,int); 9 person(person &p); 10 ~person(); 11 void show(); 12 int age; 13 private: 14 int money;//成员函数用 15 }; 16 person :: person(int age ,int money) 17 { 18 cout << "person"<< endl; 19 this->age = age; 20 this->money = money; 21 } 22 person :: person(person &p) 23 { 24 this->age = p.age; 25 this->money = p.money; 26 } 27 person :: ~person() 28 { 29 cout << "~person"<< endl; 30 } 31 void person::show(){ 32 cout << "this->age is " << this->age << "\tthis->money is " << this->money << endl; 33 } 34 int main() 35 { 36 person tom(20,40); 37 person jim(tom); 38 tom.show();//对象只能访问类共有成员 39 jim.show(); 40 // tom.money = 1000;//error//私有的对象不能用 41 42 43 }
注意的是:析构函数不能有参数和返回值(默认有this指针),构造函数可以有参数不能有返回值。
第七个函数是继承的使用:
1 #include <iostream> 2 using namespace std; 3 4 class person{ 5 public: 6 int age; 7 protected: 8 int money; 9 private: 10 int lover; 11 }; 12 class man : public person{ 13 public: 14 void show(); 15 int len; 16 private: 17 int game; 18 }; 19 void man :: show() 20 { 21 money = 100; 22 age = 10; 23 cout <<"age is " << age << endl; 24 cout <<"money is " << money << endl; 25 } 26 int main() 27 { 28 man tom; 29 tom.age = 10; 30 tom.show(); 31 }
上面代码中,man属于共有继承,就继承了person的共有成员。