14.2 面向对象编程和class(上)

作者:redyred 更新时间:2020/5/29 1:47:29 字数:2008

夜晚,图书馆电脑室里。

"明天就上课了,好烦啊。"

我一脸幽怨。

曾经作为正教授的我,当然是不怕上课之类的…

只是,难得回到这个时间点,记忆在说着学校外面这边那边都是好吃的。

虽然已经不记得那些吃的具体的名字,但还记得好吃的东西很多很多。

各种海鲜、各种烧烤、各种冰淇淋、各种锅盔饼、各种自助…

都是学生价的美味。

好想去学校外面那些美食街逛逛啊…

虽然钱是个问题。

这样想着,我看了看自己的屏幕,那里是正在运行的matlab图形界面。

matlab是国内科研的常用软件,虽然作为语言设计得很破烂,但事实证明,它确实比较适合非程序员们快速地实现计算实验。

而写论文的人,如果不想自己碰代码,有时会把部分任务委托出去。而我迫于经济形势,无奈地放低姿态,去接了一份这样的代码实现的任务。

"学姐为啥会烦?"

"想到学校外面玩,想吃东西。"

听到我的发言,尧惘宣犹豫了一下,说:

"下周我陪你出去。"

"淦,尧惘宣你能不能多从字面意思出发啊?"

"哦。"

尧惘宣满不在乎地回应一声,看都不看我。

我狠狠地瞥了他一眼,关闭了matlab的界面,一个后仰,瘫倒在后排电脑桌的隔壁上。

挺累的,不过为了赚钱,没办法嘛。

目前自己的途径不多。

地位到了,有名气了,随时都是各种各样的合作。

但目前,只是个大一太♂妹… 的确没什么经济线。

而手头这种,给理论部分写代码实现的工作,其实相当困难。

因为大多数时候,雇主都搞不清代码实现需要什么,给你的信息,用起来非常棘手——一般最后,你还是得了解任务的理论方面,才能把代码写出来。

就算是自己,很多理科领域也是没接触过的。

这不,自己做的任务,理论部分居然是对【自然界生物性多态】的研究。

从来没听过。

只懂理论的雇主给了自己几个方程,说:

"这么简单应该没问题吧。"

没nmb没问题。

你倒是给个数学符号的解释啊!

还有这个什么什么原则是个啥啊,我一介程序员知道个屁啊!

tmd,哼!

理科生果然90%都没有理性思考的能力,只知道自说自话,用着小圈子约定俗称的符号。

可以说是最差劲的产品经理。

还是咱PL好,虽然也有大量依赖惯用约定的情况…

"学姐,喉结露出来了。"

"随便了。"

"裤子上有点顶起来的是啥。"

"尧惘宣你mmp。"

"学姐真棒。"

我没理他,吐槽刚刚干了几小时的活:

"今天真惨啊…"

我tm也有今天。

谁来给我点钱?

"怎么了?"

"赚钱好难。"

尧惘宣迟疑片刻:

"学姐你长得这么好看,不如…"

我打断了他,露出危险的笑容,把左手挽上他的脖子:

"你援助一下?"

当然,我只是开玩笑。

"学姐你这不行啊,这股子好兄弟咱俩谁跟谁的气息,无感。"

我把身子凑近他,右手也挽上了他的脖子:

"你tm的有没有感觉?"

"太有了,不过学姐别再靠近了,镶嵌游戏太伤身体了。"

"哦。"

我翻翻白眼,瞥了一眼他的屏幕:

"第一次看到你用class,感觉怎么样?"

"多写一会儿觉得蛮简单的,不过总觉得整体上理解还是很迷糊。"

此时,从衣服的受力感发觉,裙撑似乎已近直角。

我微微一笑:

"其实class蛮好理解的,不管是继承还是各种方法。"

我一手挽着他,一手抓起他桌上的笔,在纸上写。

class 人 {

std::string name;

void say(){

printf("淦");

printf(this-

>name);

}

};

"比如你看,这个类,它只有一个成员name和一个方法say. 那假如我创建一个【人】,name是尧惘宣,调用这个【人】的say方法,就打印一个【淦尧惘宣】。"

"所以呢,而且现在被淦的是我吗?为什么要用两个printf,不用格式化输出?"

他一脸认真地问我。

我有些吃力地颤动一下,勉强睁开微醺的双眼:

"还…还不是为了方便没基础的读者看懂… 诶我在说什么… 总…之回到正…正题,解释什…什么是…是this…"

"嗯,我能理解this的效果,但是并不非常理解为什么这样设计,说起来… 学姐你到底有多大了?"

"我18啊,感觉不出来嘛…"

我红着脸嘟哝。

说了是回到18岁的啦!

"好吧,感觉差不多…所以所谓的this指针,究竟为什么设计成这样。"

我没有直接回他,而是抓过笔,紧紧握了一下,然后在纸上写。

class 人{

string name;

};

void say(人* this){

printf("淦");

printf(this-

>name);

}

"呼… 这个是大致的示意… 它不能编译但能简明地说明原理。每一个非静态的方法,其实都会被编译器抽取一个函数出来,并且自动添加一个this参数,类型就是对应类的指针…"

我咬住嘴唇,半晌,继续开口:

"假如我现在有一个变量叫【尧惘宣】,他的name是【"尧惘宣"】,当他用【尧惘宣.say()】调用say方法时,编译器会自动插入一个this指针参数,把它变成【say(&尧惘宣)】。实际上,这个过程要更复杂一些,从say方法确定say函数啥的,不过我先不多讲了。"

"哦,所以非静态方法是啥?"

尧惘宣开始展示他经验知识的贫乏。

"就是类里没有使用static关键字定义的方法。对于静态方法,编译器处理它们会不一样。编译器不会为静态方法插入this指针,比如如果之前的say是静态方法,那么编译器会把【尧惘宣.say()】变成【say()】而不是【say(&尧惘宣)】"

"听起来,编译器还蛮好玩的。"

尧惘宣发出感叹。

"是的,关于【类的方法】的知识,大概就是上面这些…哈…"

刚刚说完,感觉到一股狠劲从下方传来。

可能是地震了吧… 如果不是大一时体重还比较正常,可能会飞起来吧…

"学姐,再讲讲【继承】和【分派】?"

"没问题… 你还行吗?"

"男人不能说不行。"

设置
阅读主题:
字体大小:
字体格式:
简体 繁体
页面宽度:
手机阅读
菠萝包轻小说

iOS版APP
安卓版APP

扫一扫下载