不同语言的一些对比


C++/Python嵌套对比

def as_view():
    print("1\n")
    def view():
        print("2\n")
    return view;

a=as_view
a()()
#include<iostream>
using namespace  std;
auto as_view()
{
    cout<<"1\n";
    auto view = []() // 使用Lambda函数定义a,c++嵌套真这样做
    { 
        cout<<"2\n"; 
    }; 
    return view;
}
int main()
{
    auto (*a)()=as_view;//函数指针
    a()();
    system("pause");
    return 0;
}

Python循环方法

for row in matrix: # row是每一行的list
    for element in row:
        print(element, end=' ')
    print()  # 换行
    
for a, b in matrix:
    print(a, b)
    
for i in range(len(matrix)):
    for j in range(len(matrix[0])):
    	print(matrix[i][j])

关于虚函数和虚基类

1. 接口

C++抽象类

抽象类包含至少一个纯虚函数的类,其他都可以包含,抽象类无法被实例化。纯虚函数不能在抽象类中实现,否则就是普通虚函数。

virtual void makeSound() const = 0; //这个传虚函数在派生类中必须用覆盖实现一下,充当接口使用

Java接口

public class 类名 implements 接口

2. Override

Java

表示一个方法覆盖(@Override)了父类或接口的虚函数方法,Java 中所有非静态方法(非 private、final(final参数的值不能被修改 类似于const)、static)默认就是“虚函数”,无需显式声明。

C++

C++的override 写在函数()后面{}之前,但之前需要用virtual声明

3. 继承

Java

关于虚基类,java不支持多重继承:Java 类只能单继承(一个直接父类),因此不存在菱形继承问题。
java可以多层单继承

class A {}           // 基类     
class B extends A {} // B 继承 A
class C extends A {} // C 继承 A

不支持多重继承如

class D extends B, C {}

C++

对应C++继承是

class 类名 : public 类名    

虚基类

class A {};
class B : virtual public A {};
class C : virtual public A {};
class D : public B, public C {};  // D 中只有一份 A 的实例

文章作者: Alex Lee
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alex Lee !
评论
  目录