本帖最后由 dxxds 于 2013-11-23 12:06 编辑
找工作的时候,渐渐发现,很多人对C++非常恐惧,觉得很难啊什么的。
想当年在学校,一个指针,吓跑多少妹子和基佬。
所以,本人想换个方式,给大家入门。
语言嘛,就是拿来叙述事儿的:
我去买了俩鸡蛋。
冬天再大的风也掀不起妹子们那厚重的裙子了……
……
是吧,这就是语言啊。
程序语言呢,就是咱给机器讲故事了,然后某工具翻译给机器,机器看懂后,听你的话。
首先,机器绝对会听你的话,其次,翻译工具很好找,最后,就剩下我教你怎么讲故事了。
不知道现在看帖子的人,有没有自己的翻译工具(编译器)。
有的人,就用自己顺手的(推荐VC6以上,不包含VC6)
没有的人,就去下载一个小编译器吧,入门用的,不用很复杂,DEVCPP,FREE C++这样的就够了。
C FREE 5 比DEVC++ 好用不少,附一個下載鏈接
http://pan.baidu.com/share/link?shareid=336810&uk=1292274826
C FREE 5 在此下載
我在这里用DEVCPP给大家示范
打开编辑器,选文件,选源代码。
这样就开了一个未命名文件。记事本,WORD操作该会的,这里一样,后面就不多说了。
先来一段代码
#include *本站禁止HTML标签噢*
using namespace std;
int main()
{
cout<<"故事开始"<<endl;
cout<<"故事结束";
return 0;
}
这是很基础的一段。大家的英文底子不能太差啊,单词的意思一定要知道才行。
这次先给大家翻译解释,以后不翻译了。
include :包含,就是把要使用的功能所在的文件加到你的代码里。
iostream :IO 是 in/out ,stream流,目前用到的 in就是让你在电脑讲故事时对你的询问有一个回答,回答就给in到电脑里了,out就是让你故事里的事物输出到显示器上。 当然iostream功能不止这点儿,你们先记这么多、
int:integer的缩写,整数,占用电脑四个字节,一可以储存一段数字。一个字节范围0-255,int的最大表示范围就是255*255*255*255.
main:很关键的,主函数,所有故事都是从这里开始讲。
cout :读作 C OUT,向显示器输出一段话,<<就是碗里的东西向外倒。
endl :就是 end line 结束一行,然后自行回车换行了。
return:把函数结果交出去。
编写代码的时候,要记着在每一个语句后加分号";",表示句子结束,这也是现今绝大多数语言的规矩。
目前的解释就是这样了,以后所有的代码,都是基于这个往后编的。
可以试着让电脑执行这段代码了,按F9编译运行(C-FREE 用 F5),我们把文件起个名字存起来,就叫stroy_1.cpp吧。
可以看到,命令行窗口出现了,就又立刻消失了。于是大家纷纷表示,我看不到啊。
电脑太听话了啊,干完活就知道立刻退下,好孩子~~
咱们现在让它干完活先留在这,等你吭一声再走。
那就在 return 0 前面加一句 system("pause>nul ")
像这样。
int main()
{
cout<<"故事开始"<<endl;
cout<<"故事结束";
system("pause>nul");
return 0;
}
pause:很好理解,暂停了的意思,这是一段DOS命令,可以让程序停下来。
system:负责执行这个命令,以后有啥别的命令也可以在这里打
现在这样,我们就看到它把故事讲出来了,哦~ 是样的。
然后,随意按一个键盘按键,就退出了。
好,先将这些,下节讲更多内容。
本帖最后由 dxxds 于 2013-4-20 10:07 编辑
给你的故事,C++的兴趣入门 12
感觉之前的都写的太长了,会有很多人看不下去,所以这次我写短,希望能有人继续关注
上一节课已经写了职业的具体分工实现,那有了职业,咱就要给各个职业加上不同的技能,不然你可不会玩它
class role //角色
{
public:
int LV; //等级
int HP; //血值
int AT; //攻击力
void show_state();
virtual ~role(){ cout<<"删除了role资源"<<endl;}; //虚函数,为了能执行子类析构函数,顺利删除资源而写。这句会被子类析构函数覆盖,实际上不会执行
virtual void skill()=0; //虚函数,为了能调用子类的同名函数
};
void role::show_state()
{
cout<<"等级:"<<LV<<"血量:"<<HP<<"攻击力:"<<AT<<endl<<endl;
}
class warrior : public role //战士,继承了角色类
{
public:
warrior()
{
LV=1; HP=100; AT=10; cout<<"初始化了战士属性"<<endl;
}
~warrior()
{
cout<<"删除了战士资源"<<endl<<endl;
}
void skill()
{
cout<<"战士技:劈砍!"<<endl;
}
};
class magician : public role //法师,继承了角色类
{
public:
magician()
{
LV=1; HP=50; AT=20; cout<<"初始化了法师属性"<<endl;
}
~magician()
{
cout<<"删除了法师资源"<<endl<<endl;
}
void skill()
{
cout<<"法师技:冰箭!"<<endl;
}
};
int main()
{
role* player = new warrior; //role变成了战士
player->skill(); //自然这里就是战士的技能
delete player; //删了它,接下来让它变成法师
player = new magician; //变成了法师
player->skill(); //自然这里就是法师的技能
delete player; //删了它 准备结束程序
system(pause>nul);
return 0;
}
可以看到我相对上一节课,只是在role类里多增加了一个skill的函数和一个~role的析构函数,并在之前加了一个virtual,表示这个函数是虚的。
这个虚函数类似一个JAVA里的interface,也就是接口。意思是让所有继承role的类,都必须实现这个函数,不然就报错
至于为什么要写这个函数?
因为role自己不知道将来在main里会变成战士还是法师,所以这里空下,交给子类实现。
但是这个函数必须要有,因为role不能调用子类有的而父类(也就是role自己)没有的函数方法
虚函数有两种,一种是可以自己(父类)实现的,还有一种是自己(父类)不能实现的
能实现的那种,前面加上“virtual”,然后直接写就行了。
不能实现的,前面加上“virtual”,后面加上 “=0”,就行了。
虚函数和一般函数的区别是啥?
区别就是,看下面这句
role* player = new warrior;
这句代码里有两个类,一个是role,一个是warrior
那如果这两个类里都有一个同名函数,那player执行哪个?
答案就是
如果函数是虚函数,就执行player子类的(warrior)
如果它不是虚函数,就执行player自己的(role)
OK 没啥难的吧?那就到这啦。
[查看全文]
