第三十天:C++基础

  又是一门新语言。课程安排几个编程语言都是有目的性的,比如学习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的共有成员。

时间: 2024-10-12 21:21:38

第三十天:C++基础的相关文章

I学霸官方免费教程三十:Java基础教程之泛型

泛型 先给大家举个例子:如现在有一家工厂,可以生产手机,也可以生产电脑.以后还可能生产其他产品.如果给某个工厂加上了泛型,就规定了这个工厂只能生产手机或电脑,不能再生产其他产品了. 实例: package generic; /**  * 产品枚举Product  * @author 学霸联盟 - 赵灿  */ public enum Product { 手机,电脑 } package generic; /**  * 手机类Phone  * @author 学霸联盟 - 赵灿  */ public

【WPF学习】第三十六章 样式基础

原文:[WPF学习]第三十六章 样式基础 前面三章介绍了WPF资源系统,使用资源可在一个地方定义对象而在整个标记中重用他们.尽管可使用资源存储各种对象,但使用资源最常见的原因之一是通过他们的保存样式. 样式是可应用于元素的属性值集合.WPF样式系统与HTML标记中的层叠样式表(Cascading Style Sheet,CSS)标准担当类似的角色.与CSS类似,通过WPF样式可定义通用的格式化特性集合,并且为了保证一致性,在整个应用程序中应用他们.与CSS一样,WPF样式也能够自动工作,指定具体

【FastDev4Android框架开发】实例解析之SwipeRefreshLayout+RecyclerView+CardView(三十五)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/50087873 本文出自:[江清清的博客] (一).前言: 作为Android L开始,Google更新了新控件RecyclerView和CardView,这两个控件在之前的文章中已经做了详细介绍和使用,同时在前面还对下拉刷新组件SwipeRefreshLayout进行相关讲解.本来该专题不在更新了,正好昨天有一个群友问到了怎么样结合SwipeRefreshLayou

那些二十岁不信,三十岁却深信不疑的道理

-1- 那些年偷的懒,荒废的时间,败坏的身体,都!得!还!年轻的时候心比天高,以为自己能干出一番大事业,后来慢慢意识到自己只是个普通人. 每天起床照照大镜子,微笑,夸一夸自己,心情会很好.现在信了,信得有些晚. -2- 不和傻X讲道理. -3- 原来被嗤之以鼻的门当户对是有一定道理的. -4- 以貌取人其实是一套极其复杂的社会学.心理学.生物学等多学科理论的高度整合概括而产生的方法. -5- 越是急于证明的,越是自己欠缺的:越想告诉别人的道理,越是自己做不到的. 也许再努力也无法成为别人眼里的人

程序员的奋斗史(三十八)——大学断代史(二)——我与数据库的故事

文/.温国兵 惰性人皆有之,也算是人的一大天性.几日之前便构思好此文,怎奈每日杂事繁多,今日才提起笔,作下此文.本文谈谈我与数据库的故事. 说起和数据库结缘,还得从大一说起.大一刚开始接触C语言,每日就沉浸在无止境的代码中.在网上查资料的过程中,看到别人用C语言写了一个小型的图书操作程序,数据库采用的是SQL Server,运行出来的效果图很炫,惊叹原来还可以这样管理数据.熟知C语言的同学肯定对文件操作不陌生,当时我们写程序如果有静态数据,都是放在文件里的.直到后来做的C语言课程设计,我也是一大

Python进阶(三十四)-Python3多线程解读

Python进阶(三十四)-Python3多线程解读 线程讲解 ??多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度. 程序的运行速度可能加快. 在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比较有用了.在这种情况下我们可以释放一些珍贵的资源如内存占用等等. ??线程在执行过程中与进程还是有区别的.每个独立

三十项调整助力 Ubuntu 13.04 更上一层楼

在Ubuntu 13.04 Raring Ringtail安装完成之后,我们还有三十项调整需要进行. 1.Ubuntu 13.04 Raring Ringtail安装完毕后,我又进行了一系列工作 大家想知道Ubutnu最新版本带来哪些新内容吗?我认为其中引发讨论最多的话题在于,与前代版本相比(即12.10'Quantal Quetzal')新系统的性能表现并不理想.它不仅延迟明显,而且存在严重的稳定性问题.Raring Ringtail也并不在黄油计划的适用范围之内.但无论如何,Ubuntu 1

IT行业:听说编程编到三十五岁就没人要了一定要转行找出路

我听说编程编到三十五岁就没人要了一定要转行找出路是吗? 这个观点虽然很流行,但根本不值一驳.现在三十五岁转行的那些人,都具有前面所说的那些特征,对学习新技术不感兴趣,对探索计算机的本质不感兴趣,得过且过,下了班就是打游戏.看电视,总之就是懒.如果是开出租.摆摊,勤快人懒人都有饭吃,而IT这一行对懒人是非常无情的,懒人就不该入IT这一行,不从自身找原因,却到处散布这种言论,怪社会不好,打击新人的信心,着实可恨. 另外一种情况,编程编到三十五岁,进入公司的管理层,或者自己创业,这都是很勤快的人,如果

[原创]ActionScript3游戏中的图像编程(连载三十二)

2.2.5 投影距离的模拟 Photoshop投影样式面板的下一个属性是距离,它也存在于Flash的投影滤镜选项中.两者初始值一致,经笔者测试,两者在效果实现和数值意义方面基本一致.Flash不需要对默认参数进行更改. 下一项是扩展,乍一看,在Flash中并没有找到对应项.但仔细观察,在Photoshop投影样式的基础选项里,除了alpha以外,就只剩该属性用了百分比. [原创]ActionScript3游戏中的图像编程(连载三十二),布布扣,bubuko.com

QT开发(三十九)——GraphicsView框架

QT开发(三十九)--GraphicsView框架 本文主要翻译自QT 5.6.2GraphicsView官方文档 一.GraphicsView框架简介 QT4.2开始引入了Graphics View框架用来取代QT3中的Canvas模块,并作出了改进,Graphics View框架实现了模型-视图结构的图形管理,能对大量图元进行管理,支持碰撞检测,坐标变换和图元组等多种方便的功能. GraphicsView框架结构主要包含三个主要的类QGraphicsScene(场景).QGraphicsVi