C 高階剖析(二十一)之物件模型分析

2021-09-23 17:16:56 字數 3498 閱讀 3362

1.1物件模型分析

1.1.1 物件模型分析的本質

1.1.3例項**

#include

using

namespace std;

class

test};

struct st

;int

main()

執行結果:

1.1.4執行時物件退化成結構體的形式 總結

1.1.5**例項

下面是 .cpp檔案

#include

#include

using

namespace std;

class

demo

intgeti()

intgetj()

intadd

(int value)};

intmain()

#include

#include

#include

"test.h"

struct test

;demo*

demo_create

(int i,

int j)

return t;

}int

geti

(demo* demo)

intgetj

(demo * demo)

intseti

(demo *demo ,

int i)

intsetj

(demo * demo,

int j)

void

demo_free

(demo* demo)

下面是.**件

#ifndef __test_h

#define __test_h

typedef

void demo;

//和c++中private的作用相同

demo*

demo_create

(int i,

int j)

;int

geti

(demo* demo)

;int

getj

(demo * demo)

;int

seti

(demo *demo ,

int i)

;int

setj

(demo * demo,

int j)

;void

demo_free

(demo* demo)

;#endif

下面是 main.c

#include

#include

#include

"test.h"

intmain()

遇到問題有,在編寫的過程中將main檔案定義成了main.cpp導致程式找不到函式入口

1.2繼承中物件模型初探

1.2.1 繼承中物件模型

1.2.2 繼承模型初探示例

1.3 c++中多型的實現

1.3.1多型原理

1.3.2 多型vs虛函式

1.3.3 多型本質

.**件

#ifndef __test_h

#define __test_h

typedef void parent;

typedef void child;

parent * parent_create(int i ,int j);

int geti(parent * parent);

int getj(parent* parent);

int parent_add(parent* parent ,int value);

void parent_free(parent* parent);

child * child_creat(int i,int j ,int k);

int getk(child * child);

int child_add(child* child,int value);

#endif

.c檔案

#include #include #include "test.h"

static int parent_virtual_add(parent* parent ,int value);

static int child_virtual_add(child* child,int value);

struct classparent

;struct classchild

;struct vtable

;struct vtable parent_virtual_table=

;struct vtable child_virtual_table=

;parent * parent_create(int i ,int j)

return p;

}int geti(parent * parent)

int getj(parent* parent)

static int parent_virtual_add(parent* parent ,int value)

int parent_add(parent* parent ,int value)

void parent_free(parent* parent)

child * child_creat(int i,int j ,int k)

return ret; }

int getk(child * child)

int child_virtual_add(child* child,int value)

int child_add(child* child,int value)

main.c檔案

#include #include #include "test.h"

void howtoadd(parent* p ,int v)

int main()

二十一天學通C 之使用throw丟擲異常

使用throw丟擲異常 本人節選自 21天學通c 一書 丟擲異常 也稱為拋棄異常 即檢測是否產生異常,在c 中,其採用throw語句來實現,如果檢測到產生異常,則丟擲異常。該語句的格式為 throw 表示式 如果在try語句塊的程式段中 包括在其中呼叫的函式 發現了異常,且拋棄了該異常,則這個異常就...

二十一天學通C 之異常處理機制

異常處理機制 本人節選自 21天學通c 一書 c 並不是第乙個對結構化執行期錯誤處理進行支援的語言。早在20世紀60年代,pl 1就提供了一種內建的異常處理機制 ada也在20世紀80年代提供了自己的異常處理,而c 是在1989年時才有了異常處理機制。但是,c 的異常處理是獨一無二的,並且其已經作為...

二十一天學通C 之使用throw丟擲異常

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!使用throw丟擲異常 本人節選自 21天學通c 一書 丟擲異常 也稱為拋棄異常 即檢測是否產生異常,在c 中,其採用throw語句來實現,如果檢測到產生異常,則丟擲異常。該語句的格式為 throw 表示式 如果在try語句塊的程式段中 包括在其中...