Python和C++之间

发布时间 2023-12-11 16:16:49作者: 辰令

编程语言

编程语言创造来都是为了解决实际问题的
 了解一门第二,甚至第三语言。因为只有你了解了不同工具的特性,以及它们擅长解决的问题,
你才能更高效地在日常工作中运用它们。为问题选择正确的语言/工具/解决方案,将能大大减少解决问题所需的工作量
训练你习惯跳出一种语言或范式的框架来思考问题
  不同的编程语言,它们有着不同的语法和编程思想 虽然有一些相似之处,但它们侧重点不同
(层次-阶段-种类)-面对的问题,依据的历史  

函数式编程语言

LISP     是列表处理语言(全名:List Processor   
Haskell  是Haskell 有着严格的类型系统和强大的类型推导功能
Scala    是一种混合式编程语言,它将函数式编程和面向对象编程结合在了一起
Scheme   是一种 Lisp 方言,它是函数式编程语言的一种经典代表
Clojure  是一种 Lisp 方言,它将函数式编程和面向对象编程结合在了一起

面向过程编程

C 
Fortran	

面向对象

C++ 
Java

计算机不同语言

 花很多时间在比较二者不同。浮潜--深潜
     任意一个都缺乏了解的前提下,是很浪费时间的一件事。
 C++属于代码级语言,语言风格应用广泛,非常适用算法理论、计算思维理论的学习。 但是C++太庞大,涉及了太多规则,入门可能感觉蒙。
 C++ Low Level 意味着他离机器更近,你写的代码需要思考机器本身的问题,
 而不是像一些python关心业务逻辑对于平台和系统层面的东西交给系统即可
  C++可以为开发者提供更深入的编程理解和更广泛的应用领域

Hello-world

// hello.cpp
#include <iostream>
using namespace std;
int main()
{
    cout << "Hello World!";
    return 0;
}	

## compile: g++ hello.cpp
## ./a.out
1.数据类型: C++ 是一个强类型语言 一个变量的类型必须在使用之前进行声明
           C++ 中,变量是一个有名字的内存地址。声明一个变量就是给一个内存地址起一个名字,并将变量类型与这个内存地址关联起
		    在 C++ 中,表达式 y = x 表示的是将 x 的值复制到那个名字为 y 的内存地址上
2.表达式 
     运算-- 运算方向 运算结合律 运算优先级 
3.语句
   结构化语句-控制语句
	遍历
    for (int x = 0; x < 5; x++)
      cout << x;
   函数的使用:
       传值-传址 传引用	   
4.常用的功能
 文件输入与输出: C++ 中,我们必须先导入文件流库,声明对象,显式地打开文件,显式地检查我们是否到了文件末尾:
 异常处理
5.类 C++特有的类、模板
   指针只是一个持有内存地址的变量	
   C++中的指针、多态
  C++要求开发者手动管理内存,这可能会增加一定的复杂性和风险。但正是这种底层的控制能力使得C++成为开发高性能和资源敏感的应用的理想选择
   熟悉计算机底层原理--程序运行机制方面
6.C++ 初始化 
   初始化列表--> 构造函数初始化  --> 声明时初始化-(就地初始化)	
      等号= 和 {} 花括号
	构造函数除了有名字、形参列表和函数体外,还可以有初始化列表  

Python

name = "Python"
print("Hello, {}".format(name))	

##Python 中表达式 y = x 表示的是 x 和 y 指向同一个对象(即同一个对象的两个名字)
Python的自动内存管理机制(垃圾回收)使得开发者无需过多关注内存管理细节,更专注于问题的解决


 ###Python 初始化
  python类中初始化形式:以下定义函数时属性赋值是否允许为空和实例化时是否直接传入参数
  def __init__(self):
      pass
  def __init__(self, 参数1,参数2,,,参数n):
      pass
  ## 实例化时,直接传入参数	  

python中也支持多态,但是是有限的的支持多态性,
  主要是因为python中变量的使用不用声明,所以不存在父类引用指向子类对象的多态体现,
   同时python不支持重载
python这里的多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数	
super 是一个 特殊的类 super() 就是使用 super 类创建出来的对象 最常 使用的场景就是在 重写父类方法时,调用 在父类中封装的方法实现	
      super(Dog, self).greet()  #调用父类Animal的greet方法  在子类中调用父类的初始化方法了
	  super(A, self).__init__(a, b) super 其实和父类没有实质性的关联 super(cls, inst) 获得的是 cls 在 inst 的 MRO 列表中的下一个类。
	 定义的每一个类,Python 会计算出一个方法解析顺序(Method Resolution Order, MRO)列表,它代表了类继承的顺序 

C++编译器

 在默认情况下(用户没有定义,但是也没有显式的删除),编译器会自动的隐式生成一个拷贝构造函数和赋值运算符 
   默认生成的拷贝构造函数和赋值运算符,只是简单的进行值的复制
     深拷贝和浅拷贝主要是针对类中的指针和动态分配的空间来说
   拷贝构造函数是在对象被创建是调用的,而赋值函数只能在已经存在了的对象调用

参考

    https://blue.cs.sonoma.edu/~tiawatts/UsefulStuff/C++ForPythonProgrammers.pdf
   给 Python 程序员的 C++ 简易入门指南 https://blog.csdn.net/u010099080/article/details/109961775
    https://cloud.tencent.com/developer/article/1751906
	为什么 Python 程序员有必要学习一下 C++? https://oicebot.github.io/2019/05/22/why-python-programmer-should-learn-cpp.html