The last one was here   C++ Hybrid programming idlcpp course Python piece (4)

The first one is here C++ Hybrid programming idlcpp course ( One )

Similar to the previous project , engineering PythonTutorial3 in , Three files have also been added :PythonTutorial3.cpp, Tutorial3.i, tutorial3.py. among PythonTutorial3.cpp The content of this paper is basically the same PythonTutorial2.cpp The same , I won't repeat .

Let's look at it first Tutorial3.i The content of :

namespace tutorial
{
struct Point
{
float x;
float y;
nocode Point();
nocode Point(float a, float b);
nocode Point(const Point& pt); #{
Point()
{}
Point(float a, float b)
{
x = a;
y = b;
}
#}
}; struct Shape
{
abstract float getArea();
## virtual ~Shape() {}
}; struct Triangle : Shape
{
Point m_vertices[#];
nocode static Triangle+ New();
#{
virtual float getArea()
{
return fabs(m_vertices[].x * m_vertices[].y
+ m_vertices[].x * m_vertices[].y
+ m_vertices[].x * m_vertices[].y
- m_vertices[].x * m_vertices[].y
- m_vertices[].x * m_vertices[].y
- m_vertices[].x * m_vertices[].y) * 0.5;
}
static Triangle* New()
{
return new Triangle;
}
#}
}; }

There are still struct Point.  Introduces the base class struct Shape. This line

abstract float getArea();

Means to declare a pure virtual function , amount to C++ Medium

virtual float getArea() = 0;

If it's not a pure virtual function , Use keywords virtual Instead of abstract that will do .

New type added Triangle

struct Triangle : Shape

And C++ equally , use : Represents inheritance . because idlcpp It represents the interface information , So only public inheritance . And C++ Different ,idlcpp did not public, protected, private These three key words .

Then there are data members m_vertices;

Point m_vertices[#3];

idlcpp Only the information about the interface , In its grammar analysis part , You can only see Point m_vertices[]. Numbers 3 You need to insert code . among # Represents an identifier or integer directly followed by ( It's actually made up of letters , A string of underscores and numbers ) Insert into the generated C++ In the corresponding position of the header file . The next line

nocode static Triangle+ New();

Declared a New The static function of , In fact, modern code is in the following type declaration , So here we use nocode Prevent generating function declarations in header files , As mentioned earlier ,idlcpp If you see the constructor declaration , Will generate static functions New, So the constructor declaration cannot appear at this time , In case of name conflict . Let's compare the following implementation part C++ Statement

static Triangle* New()

Here and C++ The inconsistency is + Instead of *, Represents the function interior with new Creates an object in the form of , Return its pointer , The outside world needs to use delete Delete it in the form of ( There's another case of reference counting , Don't talk about ). In scripting languages, garbage collection mechanism is usually included , Script language automatically manages the allocation and release of memory . Programmers generally don't care when to delete objects , And in the C++ The lifetime of objects allocated on the heap in is generally maintained by the programmer . To deal with the differences ,idlcpp There are several forms in the return value type part of the function declaration :

idlcpp Statement

C++ Statement

Realization

typeName

typeName

Return value

typeName &

typeName&

Return reference

typeName *

typeName*

Return pointer

typeName +

typeName*

Return pointer , The outside world needs delete, Or increase the reference count , The outside world needs release

typeName +[]

typeName*

Return pointer , The outside world needs delete[]

For example, the following C++ Code :

int g_a;
int* getGlobal()
{
return &g_a;
} int* getNew()
{
return new int;
} int* getNewArray(int count)
{
return new int[count];
}

The return value type of the three functions is int*, But for the last two , We need to use delete and delete[] Free memory , In terms of grammar , You can't tell these from the declaration of a function . It can only be handled by the programmer according to the actual situation . In scripting languages, you don't want to see the call to delete objects displayed . therefore idlcpp Through the declaration at the grammatical level , Differentiate in the generated metadata code , And then by the runtime library (pafcore.dll) To deal with .

Generated after compilation Tutorial3.h Is as follows :

//DO NOT EDIT THIS FILE, it is generated by idlcpp
//http://www.idlcpp.org #pragma once #include "./Tutorial3.h"
namespace tutorial{ struct Triangle; } namespace tutorial
{
struct Point
{
public: float x;
float y;

Point()
{}
Point(float a, float b)
{
x = a;
y = b;
} }; struct Shape
{
public: virtual float getArea() = ;
virtual ~Shape() {}
}; struct Triangle : public Shape
{
public: Point m_vertices[]; virtual float getArea()
{
return fabs(m_vertices[].x * m_vertices[].y
+ m_vertices[].x * m_vertices[].y
+ m_vertices[].x * m_vertices[].y
- m_vertices[].x * m_vertices[].y
- m_vertices[].x * m_vertices[].y
- m_vertices[].x * m_vertices[].y) * 0.5;
}
static Triangle* New()
{
return new Triangle;
} }; }

The content is basically about Tutorial3.i One to one correspondence of .

And then take a look at the script tutorial3.py The content of :

import pafpython;
paf = pafpython.paf; triangle = paf.tutorial.Triangle();
triangle.m_vertices[0] = paf.tutorial.Point(0,0);
triangle.m_vertices[1] = paf.tutorial.Point(0,1);
triangle.m_vertices[2] = paf.tutorial.Point(1,1); print(triangle.getArea()._);

Created a tirangle object , Then set the data members , The range of subscripts that can be detected by the runtime here is 0 to 2, If out of range, an error will be reported , Finally, call its base class Shape Function declared in getArea(), Because this is a virtual function , So it will eventually call Traingle::getArea().

The compilation results are shown in the figure below :

C++ Hybrid programming idlcpp course Python piece (5) More articles about

  1. C++ Hybrid programming idlcpp course Python piece (9)

    The last one was here C++ Hybrid programming idlcpp course Python piece (8) The first one is here C++ Hybrid programming idlcpp course ( One ) Compared with the previous project , engineering PythonTutorial7 In addition to four files PythonTu ...

  2. C++ Hybrid programming idlcpp course Python piece (8)

    The last one was here C++ Hybrid programming idlcpp course Python piece (7) The first one is here C++ Hybrid programming idlcpp course ( One ) Similar to the previous project , engineering PythonTutorial6 in , Four files have also been added :Pyt ...

  3. C++ Hybrid programming idlcpp course Python piece (7)

    The last one was here C++ Hybrid programming idlcpp course Python piece (6) The first one is here C++ Hybrid programming idlcpp course ( One ) And PythonTutorial4 The project is similar , engineering PythonTutorial5 in , Same as ...

  4. C++ Hybrid programming idlcpp course Python piece (6)

    The last one was here  C++ Hybrid programming idlcpp course Python piece (5) The first one is here C++ Hybrid programming idlcpp course ( One ) engineering PythonTutorial4 Four files have been added to :PythonTutorial4 ...

  5. C++ Hybrid programming idlcpp course Python piece (4)

    The last one was here C++ Hybrid programming idlcpp course Python piece (3) The first one is here C++ Hybrid programming idlcpp course ( One ) Similar to the previous project , engineering PythonTutorial2 in , Three files have also been added Pyt ...

  6. C++ Hybrid programming idlcpp course Python piece (3)

    Last one  C++ Hybrid programming idlcpp course Python piece (2)  It's a hello world Example , Only static function calls are involved . This one will have something new . And PythonTutorial0 be similar , engineering Pyth ...

  7. C++ Hybrid programming idlcpp course Python piece (2)

    In the last article C++ Hybrid programming idlcpp course ( One )  This paper introduces the in idlcpp Tool use . Right now idlcpp With the example tutorial to explain , This is for  Python Examples of language . Let's start with the first example program Pyth ...

  8. C++ Hybrid programming idlcpp course Lua piece (6)

    The last one was here C++ Hybrid programming idlcpp course Lua piece (5) The first one is here C++ Hybrid programming idlcpp course ( One ) engineering LuaTutorial4 Four files have been added to :LuaTutorial4.cpp, Tut ...

  9. C++ Hybrid programming idlcpp course Lua piece (9)

    The last one was here C++ Hybrid programming idlcpp course Lua piece (8) The first one is here C++ Hybrid programming idlcpp course ( One ) Compared with the previous project , engineering LuaTutorial7 In addition to four files LuaTutorial7.c ...

Random recommendation

  1. Java Authoritative guide to performance optimization - Reading notes ( Two )-JVM performance tuning - summary

    summary :JVM Performance tuning doesn't have a very fixed setting , For example, how much heap size is set , How many in the old age . But according to the actual application system requirements , The actual active memory is determined . Text : JVM Tuning workflow The whole tuning process is an iteration that repeats itself , ...

  2. IOS add controls

    YJQApp *appInfo =self.apps[i]; //. Add images UIImageView * iconView = [[UIImageView alloc]init]; CGFloat i ...

  3. 【gitlab】 Version management tools

  4. JavaScript Advanced programming ( One ):JavaScript brief introduction

    One .JavaScript Realization 1. A complete JavaScript It consists of three parts : 1)ECMAScript The core 2)DOM Document object model 3)BOM Browser object model 2. Document object model (DOM) The document is right ...

  5. 【Dog】

  6. Java Knowledge arrangement one

    Document 2 password :java

  7. use IDEA stay Tomcat Project of the Ministry of Commerce

    In fact, every time you need to run jsp Right click on the page =>run It can also run , But there will be the following Normal should be Run==>Edit Con-- You'll see this page , Never in Defaults inform Tomcat with ...

  8. JavaScript Medium namespace

    <head> <title> New Document </title> <script> var global = window.global||{} ...

  9. Tomcat-----&gt;tomcat Configure the virtual host ( Build a website )mac

    1. First, in the server.xml Add HOST <Host name="www.snowing.com" appBase="/Users/snowing/Downlo ...

  10. ( translate )Getting Started——1.2.4 Tutorial:Storyboard( The storyboard )

    This tutorial is based on the project you built in the previous lesson . After this tutorial , You will use the view you learned earlier . View controller . action . The content of the navigation , Some key user interfaces will also be created for the application , And add behavior to the scene The following is the content of this lesson : 1. ...