再读C++的设计艺术(6)

Posted by Johan Niu on April 29, 2018

再读C++的设计艺术(6)

1 成员函数和非成员函数

成员函数和非成员函数之间最大的区别就是,成员函数的参数里面有一个你看不见的参数,这个参数传的是this指针。

this指向当前对象的指针。

2 继承

生物的继承进化,基因既有自己的基因,又有继承前人的基因(加机制),但是并没有完全加入了前人的基因(减机制),一些前人的基因可能没有继承。

但是在C++中,虽然有priave,但是还是完全继承了前人的基因。也就是C++只有加机制,没有减机制。

例子:

class Base {
	private:
  	int a;
  	int b;
};

class Derived : public Base {
	private:
  	int c;
};

int main() {
  cout << sizeof(Base) << endl;  // 输出8
  cout << sizeof(Derived) << endl;  // 输出12

  return 0;
}

生物不断地进化,可能进化出新的物种。

如果C++就像生物一样,既能继承一些基因,也能丧失一些基因,那么通过不断地继承之后,可能出现一个新的类,一个功能完全不同于最初基类的类。

3 友元

友元机制允许一个类将对其非公有成员的访问权限授予指定的函数或类。

详细见别人的博客:https://n3verl4nd.iteye.com/blog/2362279

4 方法论

4.1 程序设计

1. 设计类架构的方法,如果从上往下设计,也就是从基类开始思考,思考下面要派生什么类,这样的思考方法其实是有一定问题的,很难想到下面该派生什么类。
但是可以反向思考,从小往上思考。想好最下层的类,然后不断从中抽取基类。
类是抽象出来的,不是从上往下拍脑袋想出来的。

2. 程序中,小问题要及时解决,不要试图去绕过去,程序越来越庞大,小问题越滚越多,最终达到毁灭性灾难。小问题不要积累,不要去妥协,一定要及时解决。

4.2 读书

1.学习,学会规则只能达到解决温饱的问题,真正要达到衣食无忧,靠的是悟性。
悟性对一个事物的思考,把握。
学过一个东西,然后能掌握它,抓住它的主要矛盾,这是只是一个基本的本事,真正的本事是没有学过一个东西,能够抓住它的主要矛盾。

2. 其实很多高考新课标的修改就是一种思路。
新课标的题目被称为很开放,开放并不是乱七八糟的无厘头,而是一种思想的开放。
通过已有已学过的知识,去分析一个问题,然后设计解决方案。
这就是新课标的设计类题目。这也就是其被称为开放的原因。
学习,去思考,去推理,达到设计的境界。

3. 人类一切美好高雅的东西都应该去尝试,因为这些都是艺术,是人类伟大智慧的结晶,给人带来美好感受。
4. 
4.读书也要有敏感性,对其里面的内容要敏感,快速抓住其思考,精髓,核心等等。

4.3 做事

1. 对事物要有一种“敏”,也就是对事物有一种敏感,快速感知其思路,其设计的伟大之处,以及要达到的目的。

2. 真正要干成点什么事,想象力和创造力显得尤为重要。
传统教育对技术细节重视最大,在最基础的时候,技术细节确实很重要,但是达到一定高度之后,
想象力,创造力,体系性显得特别重要,是真正的突破口。

3. 想象力,创造力,其实可以这样做,想到一个想法,然后就去做,去实现,然后搞出个水落石出!
不要一想而过!

4. 一个人都优秀是他思考问题的方法优秀,有和他人不同的思考角度。一个人要快速的调转自己的思考方式,也就是随机应变的能力强。而不是十分固执,死磕于自己的一种角度,人改变自己的思想方法很难。《柳丁思考的帽子》