Objective-Cのクラスを本当に理解する(一)
3782 ワード
前言
このシリーズの文章はいくつかの困難な内容を紹介しているわけではありません.
重要なのは、以前の学習過程で自発的に、受動的に誤って吸収された知識を見つけて、それを脳から取り除き、人に与えた矛盾を整理することです.
しかし、
目的
きそ
いくつかの基礎知識を振り返ります C言語の構造体の表現、 Objective-Cクラスの表現、C言語の構造体とObject-Cクラスの表現の違い CとOCの言語タイプから分類されるいくつかの違いは主にruntime特性 から来ている.
C言語構造体とtypedef
C言語では、構造体(struct)は、C言語における集約データ型(aggregate data type)の一種であるデータ構造を指す.
構造体は、より複雑なデータ構造を実現するために変数、ポインタ、または配列などとして宣言することができる.
構造体は、構造体のメンバー(member)と呼ばれる要素の集合でもあり、これらのメンバーは異なるタイプであり、メンバーは一般的に名前でアクセスできます.
簡単に言えば、構造体は一連のデータを集約したデータ構造である.
構造体の定義は次のとおりです. である. とも呼ばれる. である. である.構造体宣言の末尾にセミコロン を付ける
一般的には、
構造体はC言語の一種である集約データ型(
例1では、この構造体にはラベルが明記されていない(
例2では、構造体の
この構造体を使用して変数を宣言する方法は、次のとおりです.
構造体変数のメンバー変数へのアクセス1(ポイント演算子)
構造体変数のメンバー変数の方位について、
構造体変数のメンバー変数へのアクセス2(矢印演算子)
例では
オブジェクトに格納されている値の変更に関連するため、ポインタが使用されます.
したがって、関数:
パラメータには構造体ポインタがあります
したがって、関数内で構造体オブジェクトのメンバーの値にアクセスするには、次のようにする必要があります.
以下のように略記します.
以上のように
構造体および
簡単な解釈は
参考:ウィキペディア、『明解C言語』
このシリーズの文章はいくつかの困難な内容を紹介しているわけではありません.
重要なのは、以前の学習過程で自発的に、受動的に誤って吸収された知識を見つけて、それを脳から取り除き、人に与えた矛盾を整理することです.
しかし、
Objective-C
の対象の意味を正しく理解する主線がある.目的
Objective-C
オブジェクトとクラスの定義を理解するデータ構造表現きそ
いくつかの基礎知識を振り返ります
typedef
の意味の役割、構造体ポインタC言語構造体とtypedef
C言語では、構造体(struct)は、C言語における集約データ型(aggregate data type)の一種であるデータ構造を指す.
構造体は、より複雑なデータ構造を実現するために変数、ポインタ、または配列などとして宣言することができる.
構造体は、構造体のメンバー(member)と呼ばれる要素の集合でもあり、これらのメンバーは異なるタイプであり、メンバーは一般的に名前でアクセスできます.
簡単に言えば、構造体は一連のデータを集約したデータ構造である.
構造体の定義は次のとおりです.
struct tag { member-list } variable-list ;
struct
は、構造体キーワードtag
は構造体の標識であり、構造名member-list
は、構造体メンバーリストvariable-list
は構造体宣言の変数(ここで「宣言」は動詞)一般的には、
tag
、member-list
、variable-list
の3つの部分が少なくとも2つ現れる構造体はC言語の一種である集約データ型(
aggregate data type
)であり、メンバー変数(member-lis
)を持つのが一般的であるため、以下の2例を挙げる.例1では、この構造体にはラベルが明記されていない(
tag
が欠けている)struct
{
int a;
char b;
double c;
} s1;
例2では、構造体の
tag
はSIMPLE
と命名され、変数を宣言するために使用されなかった(variable-list
).struct SIMPLE
{
int a;
char b;
double c;
};
この構造体を使用して変数を宣言する方法は、次のとおりです.
struct SIMPLE simple1;
struct SIMPLE simple2;
構造体変数のメンバー変数へのアクセス1(ポイント演算子)
構造体変数のメンバー変数の方位について、
.
を使用して、上記で定義したstruct SIMPLE
タイプのオブジェクトを例に挙げます.struct SIMPLE simple1;
simple1.a = 100;
simple1.b = 100;
simple1.c = 0.5;
構造体変数のメンバー変数へのアクセス2(矢印演算子)
//
struct gstudent {
char name[20];
int age;
float height;
};
// ,
/* :
struct gstudent * ( )
int
*/
void changeStudentHeight (struct gstudent * student,int height) {
student->height = height;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
//
struct gstudent tom = {"tom liu",25,170};
changeStudentHeight(&tom,180);//tom 180
printf("tom %f
",tom.height);
}
return 0;
}
例では
student->height = height;
オブジェクトに格納されている値の変更に関連するため、ポインタが使用されます.
したがって、関数:
void changeStudentHeight (struct gstudent * student,int height)
パラメータには構造体ポインタがあります
したがって、関数内で構造体オブジェクトのメンバーの値にアクセスするには、次のようにする必要があります.
(* student).height = height;
以下のように略記します.
student->height = height;
以上のように
->
で構造体メンバーにアクセスする方法はiOS開発者の皆さんが印象に残ると思いますが、後述します.構造体および
typedef
CおよびC++のtypedef
キーワードは、ソースコードをより読みやすく理解するために、1つの資料タイプに新しい名前を付けるために使用される.簡単な解釈は
typedef
宣言が元のデータ型に「同義語」を定義できることであり、彼の役割はデータ型名に等しい.typedef
宣言を有効に使用すると、冗長な書き方を簡略化できます.struct gstudent {
char name[20];
int age;
float height;
};
//
// tag(gstudent)
typedef struct {
char name[20];
int age;
float height;
}Student;
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
//struct gstudent tom = {"tom liu",25,170};
// typedef tom2
Student tom2 ={"tom liu",25,170};
}
return 0;
}
参考:ウィキペディア、『明解C言語』