{"id":421,"date":"2023-02-25T11:38:05","date_gmt":"2023-02-25T03:38:05","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=421"},"modified":"2023-04-29T21:25:41","modified_gmt":"2023-04-29T13:25:41","slug":"android-ndk-basic-cpp-inheritance-polymorphic","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/02\/25\/android-ndk-basic-cpp-inheritance-polymorphic\/","title":{"rendered":"Android NDK\u57fa\u784021\uff1aC++_\u7ee7\u627f_\u591a\u6001"},"content":{"rendered":"<h2>\u7ee7\u627f<\/h2>\n<pre><code class=\"language-cpp\">#include &lt;iostream&gt;\n\n\/\/\u4ee3\u7801\u7684\u91cd\u7528\u6027\nusing namespace std;\n\n\/\/\u4eba\u7c7b\nclass Human {\npublic:\n    void say() {\n        cout &lt;&lt; &quot;\u8bf4\u8bdd&quot; &lt;&lt; endl;\n    }\nprotected:\n    char* name;\n    int age;\n};\n\n\/\/\u7537\u4eba\nclass Man : public Human {\npublic:\n    \/\/\u6ce1\u599e\n    void chasing(){\n        cout &lt;&lt; &quot;\u6ce1\u599e&quot; &lt;&lt; endl;        \n    }\nprivate:\n    \/\/\u5144\u5f1f\n    char* brother;\n};\n\nvoid work(Human&amp; h) {\n    h.say();\n}\n\nvoid main() {\n    Man m;\n    m.say();\n\n    \/\/\u7236\u7c7b\u7c7b\u578b\u7684\u5f15\u7528\u6216\u6307\u9488\n    Human* h_p = &amp;m;\n    h_p-&gt;say();\n\n    \/\/\u5f15\u7528\n    Human &amp;h1 = m;\n    h1.say();\n\n    \/\/\u5b50\u7c7b\u5bf9\u8c61\u521d\u59cb\u5316\u7236\u7c7b\u7c7b\u578b\u7684\u5bf9\u8c61\n    Human h2 = m;\n\n    system(&quot;pause&quot;);\n}<\/code><\/pre>\n<p><!-- more --><\/p>\n<h3>\u5411\u7236\u7c7b\u6784\u9020\u65b9\u6cd5\u4f20\u53c2<\/h3>\n<pre><code class=\"language-cpp\">\/\/\u5411\u7236\u7c7b\u6784\u9020\u65b9\u6cd5\u4f20\u53c2\n\/\/\u4eba\u7c7b\nclass Human {\npublic:\n    Human(char* name, int age) {\n        this-&gt;name = name;\n        this-&gt;age = age;\n    }\n\n    void say() {\n        cout &lt;&lt; &quot;\u8bf4\u8bdd&quot; &lt;&lt; endl;\n    }\nprotected:\n    char* name;\n    int age;\n};\n\n\/\/\u7537\u4eba\nclass Man : public Human {\npublic:\n    \/\/\u7ed9\u7236\u7c7b\u6784\u9020\u51fd\u6570\u4f20\u53c2\uff0c\u540c\u65f6\u7ed9\u5c5e\u6027\u5bf9\u8c61\u8d4b\u503c\n    Man(char *brother, char *s_name, int s_age, char *h_name, int h_age) : Human(s_name, s_age), h(h_name, h_age) {\n        this-&gt;brother = brother;\n    }\n\n    \/\/\u6ce1\u599e\n    void chasing() {\n        cout &lt;&lt; &quot;\u6ce1\u599e&quot; &lt;&lt; endl;\n    }\nprivate:\n    \/\/\u5144\u5f1f\n    char* brother;\n    Human h;\n};\n\nvoid main() {\n    Man m(&quot;Joe&quot;, &quot;ZhangSan&quot;, 18, &quot;Lisi&quot;, 18);\n\n    system(&quot;pause&quot;);\n}<\/code><\/pre>\n<h3>\u6784\u9020\u51fd\u6570\u4e0e\u6790\u6784\u51fd\u6570\u8c03\u7528\u7684\u987a\u5e8f<\/h3>\n<pre><code class=\"language-cpp\">\/\/\u6784\u9020\u51fd\u6570\u4e0e\u6790\u6784\u51fd\u6570\u8c03\u7528\u7684\u987a\u5e8f\nclass Human {\npublic:\n    Human(char* name, int age) {\n        this-&gt;name = name;\n        this-&gt;age = age;\n        cout &lt;&lt; &quot;Human \u6784\u9020\u51fd\u6570&quot; &lt;&lt; endl;\n    }\n\n    ~Human() {\n        cout &lt;&lt; &quot;Human \u6790\u6784\u51fd\u6570&quot; &lt;&lt; endl;\n    }\n\n    void say() {\n        cout &lt;&lt; &quot;\u8bf4\u8bdd&quot; &lt;&lt; endl;\n    }\nprotected:\n    char* name;\n    int age;\n};\n\n\/\/\u7537\u4eba\nclass Man : public Human {\npublic:\n    \/\/\u7ed9\u7236\u7c7b\u6784\u9020\u51fd\u6570\u4f20\u53c2\uff0c\u540c\u65f6\u7ed9\u5c5e\u6027\u5bf9\u8c61\u8d4b\u503c\n    an(char *brother, char *s_name,int s_age) : Human(s_name, s_age) {\n        this-&gt;brother = brother;\n        cout &lt;&lt; &quot;Man \u6784\u9020\u51fd\u6570&quot; &lt;&lt; endl;\n    }\n\n    ~Man() {\n        cout &lt;&lt; &quot;Man \u6790\u6784\u51fd\u6570&quot; &lt;&lt; endl;\n    }\n\n    \/\/\u6ce1\u599e\n    void chasing() {\n        cout &lt;&lt; &quot;\u6ce1\u599e&quot; &lt;&lt; endl;\n    }\nprivate:\n    \/\/\u5144\u5f1f\n    char* brother;    \n};\n\nvoid func() {\n    \/\/\u7236\u7c7b\u7684\u6784\u9020\u51fd\u6570\u5148\u8c03\u7528\n    \/\/\u5b50\u7c7b\u7684\u6790\u6784\u51fd\u6570\u5148\u8c03\u7528\n    Man m(&quot;Joe&quot;, &quot;Android&quot;, 18);\n}\n\nvoid main() {\n    func();\n\n    system(&quot;pause&quot;);\n}<\/code><\/pre>\n<h3>\u5b50\u7c7b\u5bf9\u8c61\u8c03\u7528\u7236\u7c7b\u7684\u6210\u5458<\/h3>\n<pre><code class=\"language-cpp\">\/\/\u5b50\u7c7b\u5bf9\u8c61\u8c03\u7528\u7236\u7c7b\u7684\u6210\u5458\nclass Human {\npublic:\n    Human(char* name, int age) {\n        this-&gt;name = name;\n        this-&gt;age = age;\n        cout &lt;&lt; &quot;Human \u6784\u9020\u51fd\u6570&quot; &lt;&lt; endl;\n    }\n\n    ~Human() {\n        cout &lt;&lt; &quot;Human \u6790\u6784\u51fd\u6570&quot; &lt;&lt; endl;\n    }\n\n    void say() {\n        cout &lt;&lt; &quot;\u8bf4\u8bdd&quot; &lt;&lt; endl;\n    }\npublic:\n    char* name;\n    int age;\n};\n\n\/\/\u7537\u4eba\nclass Man : public Human {\npublic:\n    \/\/\u7ed9\u7236\u7c7b\u6784\u9020\u51fd\u6570\u4f20\u53c2\uff0c\u540c\u65f6\u7ed9\u5c5e\u6027\u5bf9\u8c61\u8d4b\u503c\n    Man(char *brother, char *s_name, int s_age) : Human(s_name, s_age) {\n        this-&gt;brother = brother;\n        cout &lt;&lt; &quot;Man \u6784\u9020\u51fd\u6570&quot; &lt;&lt; endl;\n    }\n\n    ~Man() {\n        cout &lt;&lt; &quot;Man \u6790\u6784\u51fd\u6570&quot; &lt;&lt; endl;\n    }\n\n    \/\/\u6ce1\u599e\n    void chasing() {\n        cout &lt;&lt; &quot;\u6ce1\u599e&quot; &lt;&lt; endl;\n    }\n\n    void say() {\n        cout &lt;&lt; &quot;\u7537\u4eba\u559c\u6b22\u88c5\u903c&quot; &lt;&lt; endl;\n    }\nprivate:\n    \/\/\u5144\u5f1f\n    char* brother;\n};\n\nvoid main() {\n    \/\/\u662f\u8986\u76d6\uff0c\u5e76\u975e\u591a\u6001\n    Man m(&quot;Joe&quot;, &quot;Android&quot;, 18);\n    m.say();\n    \/\/Human h = m;\n    \/\/h.say();\n    m.Human::say();\n\n    m.Human::age = 10;\n\n    system(&quot;pause&quot;);\n}<\/code><\/pre>\n<h2>\u591a\u7ee7\u627f<\/h2>\n<pre><code class=\"language-cpp\">\/\/\u4eba\nclass Person {\n\n};\n\n\/\/\u516c\u6c11\nclass Citizen {\n\n};\n\n\/\/\u5b66\u751f\uff0c\u65e2\u662f\u4eba\uff0c\u53c8\u662f\u516c\u6c11\nclass Student : public Person, public Citizen {\n\n};<\/code><\/pre>\n<h3>\u7ee7\u627f\u7684\u8bbf\u95ee\u4fee\u9970<\/h3>\n<pre><code class=\"language-cpp\">\/\/\u7ee7\u627f\u7684\u8bbf\u95ee\u4fee\u9970\n\/\/\u57fa\u7c7b\u4e2d      \u7ee7\u627f\u65b9\u5f0f         \u5b50\u7c7b\u4e2d\n\/\/public     \uff06 public\u7ee7\u627f = &gt; public\n\/\/public     \uff06 protected\u7ee7\u627f = &gt; protected\n\/\/public     \uff06 private\u7ee7\u627f = &gt; private\n\/\/\n\/\/protected  \uff06 public\u7ee7\u627f = &gt; protected\n\/\/protected  \uff06 protected\u7ee7\u627f = &gt; protected\n\/\/protected  \uff06 private\u7ee7\u627f = &gt; private\n\/\/\n\/\/private    \uff06 public\u7ee7\u627f = &gt; \u5b50\u7c7b\u65e0\u6743\u8bbf\u95ee\n\/\/private    \uff06 protected\u7ee7\u627f = &gt; \u5b50\u7c7b\u65e0\u6743\u8bbf\u95ee\n\/\/private    \uff06 private\u7ee7\u627f = &gt; \u5b50\u7c7b\u65e0\u6743\u8bbf\u95ee\n\n\/\/\u4eba\u7c7b\nclass Human {\npublic:\n    void say() {\n        cout &lt;&lt; &quot;\u8bf4\u8bdd&quot; &lt;&lt; endl;\n    }\nprivate:\n    char* name;\n    int age;\n};\n\n\/\/\u7537\u4eba\nclass Man : protected Human {\npublic:\n    \/\/\u6ce1\u599e\n    void chasing() {\n        cout &lt;&lt; &quot;\u6ce1\u599e&quot; &lt;&lt; endl;        \n    }\nprivate:\n    \/\/\u5144\u5f1f\n    char* brother;\n};<\/code><\/pre>\n<h3>\u7ee7\u627f\u7684\u4e8c\u4e49\u6027<\/h3>\n<pre><code class=\"language-cpp\">\/\/\u7ee7\u627f\u7684\u4e8c\u4e49\u6027\n\/\/\u865a\u7ee7\u627f\uff0c\u4e0d\u540c\u8def\u5f84\u7ee7\u627f\u6765\u7684\u540c\u540d\u6210\u5458\u53ea\u6709\u4e00\u4efd\u62f7\u8d1d\uff0c\u89e3\u51b3\u4e0d\u660e\u786e\u7684\u95ee\u9898\n\nclass A {\npublic:\n    char* name;\n};\n\nclass A1 : virtual public A {\n\n};\n\nclass A2 : virtual public A {\n\n};\n\nclass B : public A1, public A2 {\n\n};\n\nvoid main() {\n    B b;    \n    b.name = &quot;Joe&quot;;\n    \/\/\u6307\u5b9a\u7236\u7c7b\u663e\u793a\u8c03\u7528\n    \/\/b.A1::name = &quot;Joe&quot;;\n    \/\/b.A2::name = &quot;Joe&quot;;\n    system(&quot;pause&quot;);\n}<\/code><\/pre>\n<h2>\u591a\u6001<\/h2>\n<h3>\u865a\u51fd\u6570<\/h3>\n<pre><code class=\"language-cpp\">\/\/\u591a\u6001\uff08\u7a0b\u5e8f\u7684\u6269\u5c55\u6027\uff09\n\/\/\u52a8\u6001\u591a\u6001\uff1a\u7a0b\u5e8f\u8fd0\u884c\u8fc7\u7a0b\u4e2d\uff0c\u89c9\u5f97\u54ea\u4e00\u4e2a\u51fd\u6570\u88ab\u8c03\u7528\uff08\u91cd\u5199\uff09\n\/\/\u9759\u6001\u591a\u6001\uff1a\u91cd\u8f7d\n\n\/\/\u53d1\u751f\u52a8\u6001\u591a\u6001\u7684\u6761\u4ef6\uff1a\n\/\/1.\u7ee7\u627f\n\/\/2.\u7236\u7c7b\u7684\u5f15\u7528\u6216\u8005\u6307\u9488\u6307\u5411\u5b50\u7c7b\u7684\u5bf9\u8c61\n\/\/3.\u51fd\u6570\u7684\u91cd\u5199\n\n#include &quot;Plane.h&quot;\n#include &quot;Jet.h&quot;\n#include &quot;Copter.h&quot;\n\n\/\/\u4e1a\u52a1\u51fd\u6570\nvoid bizPlay(Plane&amp; p) {\n    p.fly();\n    p.land();\n}\n\nvoid main() {\n    \/\/\u666e\u901a\u98de\u673a\n    Plane p1;\n    bizPlay(p1);\n\n    \/\/\u55b7\u6c14\u5f0f\u98de\u673a\n    Jet p2;\n    bizPlay(p2);\n\n    \/\/\u76f4\u5347\u98de\u673a\n    Copter p3;\n    bizPlay(p3);\n\n    system(&quot;pause&quot;);\n}<\/code><\/pre>\n<p>Plane.h<\/p>\n<pre><code class=\"language-cpp\">#pragma once\n\n\/\/\u666e\u901a\u98de\u673a\nclass Plane {\npublic:\n    virtual void fly();  \/\/\u53ea\u6709\u58f0\u660evirtual\u51fd\u6570\u624d\u80fd\u4ea7\u751f\u591a\u6001\n    virtual void land();\n};<\/code><\/pre>\n<p>Plane.cpp<\/p>\n<pre><code class=\"language-cpp\">#include &quot;Plane.h&quot;\n#include &lt;iostream&gt;\n\nusing namespace std;\n\nvoid Plane::fly() {\n    cout &lt;&lt; &quot;\u8d77\u98de&quot; &lt;&lt; endl;\n}\n\nvoid Plane::land() {\n    cout &lt;&lt; &quot;\u7740\u9646&quot; &lt;&lt; endl;\n}<\/code><\/pre>\n<p>Jet.h<\/p>\n<pre><code class=\"language-cpp\">#pragma once\n\n#include &quot;Plane.h&quot;\n\n\/\/\u55b7\u6c14\u5f0f\u98de\u673a\nclass Jet : public Plane {\n    virtual void fly();  \/\/\u53ea\u6709\u58f0\u660evirtual\u51fd\u6570\u624d\u80fd\u4ea7\u751f\u591a\u6001\uff0c\u5426\u5219\u4ecd\u7136\u8c03\u7528\u7236\u7c7b\u65b9\u6cd5\n    virtual void land();\n};<\/code><\/pre>\n<p>Jet.cpp<\/p>\n<pre><code class=\"language-cpp\">#include &quot;Jet.h&quot;\n#include &lt;iostream&gt;\nusing namespace std;\n\nvoid Jet::fly() {\n    cout &lt;&lt; &quot;\u55b7\u6c14\u5f0f\u98de\u673a\u5728\u8dd1\u9053\u4e0a\u8d77\u98de...&quot; &lt;&lt; endl;\n}\n\nvoid Jet::land() {\n    cout &lt;&lt; &quot;\u55b7\u6c14\u5f0f\u98de\u673a\u5728\u8dd1\u9053\u4e0a\u964d\u843d...&quot; &lt;&lt; endl;\n}<\/code><\/pre>\n<p>Copter.h<\/p>\n<pre><code class=\"language-cpp\">#pragma once\n\n#include &quot;Plane.h&quot;\n\n\/\/\u666e\u901a\u98de\u673a\nclass Copter : public Plane {\npublic:\n    virtual void fly();\n    virtual void land();\n};<\/code><\/pre>\n<p>Copter.cpp<\/p>\n<pre><code class=\"language-cpp\">#include &quot;Copter.h&quot;\n#include &lt;iostream&gt;\n\nusing namespace std;\n\nvoid Copter::fly() {\n    cout &lt;&lt; &quot;\u76f4\u5347\u98de\u673a\u5728\u539f\u5730\u8d77\u98de...&quot; &lt;&lt; endl;\n}\n\nvoid Copter::land() {\n    cout &lt;&lt; &quot;\u76f4\u5347\u98de\u673a\u964d\u843d\u5728\u5973\u795e\u7684\u5c4b\u9876...&quot; &lt;&lt; endl;\n}<\/code><\/pre>\n<h3>\u7eaf\u865a\u51fd\u6570(\u62bd\u8c61\u7c7b)<\/h3>\n<pre><code class=\"language-cpp\">\/\/\u7eaf\u865a\u51fd\u6570(\u62bd\u8c61\u7c7b)\n\/\/1.\u5f53\u4e00\u4e2a\u7c7b\u5177\u6709\u4e00\u4e2a\u7eaf\u865a\u51fd\u6570\uff0c\u8fd9\u4e2a\u7c7b\u5c31\u662f\u62bd\u8c61\u7c7b\n\/\/2.\u62bd\u8c61\u7c7b\u4e0d\u80fd\u5b9e\u4f8b\u5316\u5bf9\u8c61\n\/\/3.\u5b50\u7c7b\u7ee7\u627f\u62bd\u8c61\u7c7b\uff0c\u5fc5\u987b\u8981\u5b9e\u73b0\u7eaf\u865a\u51fd\u6570\uff0c\u5982\u679c\u6ca1\u6709\uff0c\u5b50\u7c7b\u4e5f\u662f\u62bd\u8c61\u7c7b\n\/\/\u62bd\u8c61\u7c7b\u7684\u4f5c\u7528\uff1a\u4e3a\u4e86\u7ee7\u627f\u7ea6\u675f\uff0c\u6839\u672c\u4e0d\u77e5\u9053\u672a\u6765\u7684\u5b9e\u73b0\n\n\/\/\u5f62\u72b6\nclass Shape {\npublic:\n    \/\/\u7eaf\u865a\u51fd\u6570\n    virtual void sayArea() = 0;\n    void print() {\n        cout &lt;&lt; &quot;hi&quot; &lt;&lt; endl;\n    }\n};\n\n\/\/\u5706\nclass Circle : public Shape {\npublic:\n    Circle(int r) {\n        this-&gt;r = r;\n    }\n\n    void sayArea() {\n        cout &lt;&lt; &quot;\u5706\u7684\u9762\u79ef\uff1a&quot; &lt;&lt; (3.14 * r * r) &lt;&lt; endl;\n    }\nprivate:\n    int r;\n};\n\nvoid main() {\n    \/\/Shape s;\n    Circle c(10);\n\n    system(&quot;pause&quot;);\n}<\/code><\/pre>\n<pre><code class=\"language-cpp\">\/\/\u63a5\u53e3\uff08\u53ea\u662f\u903b\u8f91\u4e0a\u7684\u5212\u5206\uff0c\u8bed\u6cd5\u4e0a\u8ddf\u62bd\u8c61\u7c7b\u7684\u5199\u6cd5\u6ca1\u6709\u533a\u522b\uff09\n\/\/\u53ef\u4ee5\u5f53\u505a\u4e00\u4e2a\u63a5\u53e3\n\nclass Drawble {\n    virtual void draw();\n};<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u7ee7\u627f #include &lt;iostream&gt; \/\/\u4ee3\u7801\u7684\u91cd\u7528\u6027 using namespace s [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[],"class_list":["post-421","post","type-post","status-publish","format-standard","hentry","category-android-ndk"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/421","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=421"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/421\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=421"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=421"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}