快捷搜索:

typedef struct 是为了使用这个结构体方便,实例方

来源:http://www.fab119.com 作者:每日更新 人气:85 发布时间:2020-01-05
摘要:1.struct _x1 typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。 结构体的定义: 结构体和枚举能够定义方法是 Swift 与 C/Objective-C 的主要区别之一。在 Objective-C 中,类是唯一

1.struct _x1

typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。

结构体的定义:

结构体和枚举能够定义方法是 Swift 与 C/Objective-C 的主要区别之一。在 Objective-C 中,类是唯一能定义方法的类型。但在 Swift 中,你不仅能选择是否要定义一个类/结构体/枚举,还能灵活的在你创建的类型(类/结构体/枚举)上定义方法。

{

具体区别在于:

结构体也可以象类一样可以单独定义.
class  a{};
struct a{};

⦿  实例方法

实例方法是属于某个特定类、结构体或者枚举类型实例的方法。实例方法提供访问和修改实例属性的方法或提供与实例目的相关的功能,并以此来支撑实例的功能。实例方法的语法与函数完全一致.

实例方法要卸载它所属的类型的前后大括号之间.实例方法能够隐式访问它所属类型的所有的其他实例方法和属性,实例方法只能被它所属的类的某个特定实例调用.实例方法不能脱离于现存的实例而被调用.

/*

//MARK: -- self属性(The self Property)

*/

struct  Point {

var x = 0.0, y = 0.0

func   isToTheRightOfx(x: Double) -> Bool {

return  self.x > x //只有在实例方法的某个参数名和实例的某个属性名称相同的时候参数名有优先权,此时必须使用self.x > x ,来区分属性名和参数名,如果该情况下不使用self,Swift就会认为两次使用的x都值得是名称为x的函数参数

}

}

//MARK: -- 在实例方法中修改值类型

//结构体和枚举是值类型。一般情况下,值类型的属性不能在它的实例方法中被修改。但是,如果你确实需要在某个具体的方法中修改结构体或者枚举的属性,你可以选择变异(mutating)这个方法,然后方法就可以从方法内部改变它的属性;并且它做的任何改变在方法结束时还会保留在原始结构中。方法还可以给它隐含的self属性赋值一个全新的实例,这个新实例在方法结束后将替换原来的实例。

struct Point2 {

var x = 0.0, y = 0.0

mutating func moveByx(deltaX: Double, y deltaY: Double) {

x += deltaX

y += deltaY

//变异方法能够赋值给隐含属性self一个全新的实例.上面的两个等式也可以写成

//            self = Point2(x: x + deltaX, y: y + deltaY)

}

}

//MARK: -- 枚举的变异方法可以吧self设置为相同的枚举类型中不同的成员:

enum TriStateSwitch {

case Off,Low,High

mutating func next()  {

switch self {

case .Off:

self = .Low

case .Low:

self = .High

case .High :

self = .Off

}

}

}

//MARK: -- 定义类

class Counter {

var count = 0

func increment() {

count += 1 // 类型的每一个实例都有一个隐含属性self,self完全等同于该实例本身,也可以写成 self.count += 1 一般不写self,

}

func incrementBy(amount: Int) {

count += amount

}  func reset() {

 count = 0

}

}

...

若struct node {}这样来定义结构体的话。在申请node 的变量时,需要这样写,struct node n;

结构体也可以在名字前面加入控制访问符.
public struct student{};
internal struct student{};

⦿  类方法

/*类方法

  1. 声明类的类方法,在方法的func关键字之前加上关键字class;

  2. 声明结构体和枚举的类方法,在方法的func关键字之前加上关键字static

注意: 在OC中,只能为OC的类定义类方法,在Swift中,可以为类,结构体,枚举定义类方法,每个类方法都被它所支持的类型显式的包含

*/

class SomeClass{

class  func someTypeMethod(){

print("调用了类方法")

}

func someInstanceMethods(){

print("调用了实例方法")

}

}

//结构体的类方法

struct LevelTracker {

static var highestUnlockedLevel = 1//静态属性

//定义结构体的类方法 static

static func unlockLevel(level: Int) {

if level > highestUnlockedLevel { highestUnlockedLevel = level }

}

static func levelIsUnlocked(level: Int) -> Bool {

return level <= highestUnlockedLevel

}

var currentLevel = 1//实例属性

//实例方法

mutating func advanceToLevel(level: Int) -> Bool {

if   LevelTracker.levelIsUnlocked(level: level) {

currentLevel = level

return true

} else {

return false

}

}

}

class Player {

var tracker = LevelTracker()

let playerName: String

func completedLevel(level: Int) {

LevelTracker.unlockLevel(level: level + 1)

let advance =  tracker.advanceToLevel(level: level + 1)

print("(advance)")

}

init(name: String) {

playerName = name

}

}

}x1;

若用typedef,可以这样写,typedef struct node{}NODE; 。在申请变量时就可以这样写,NODE n;

如果结构体student没有publice或者internal的声明 类program就无法使用student结构定义 obj对象
如果结构体student的元素没有public的声明,对象obj就无法调用元素x
因为默认的结构体名和元素名是*******类型
程序:
using System;
public struct student
    {
       public int x;
    };

2.typedef struct _x2

区别就在于使用时,是否可以省去struct这个关键字。

class program
{
    public static void Main()
    {
     student obj=new student();
     obj.x=100;       
    }

{

struct和typedef struct

};
在结构体中也可以定义静态成员与类中一样,使用时必须用类名,或结构名来调用不属于实例,声明时直接定义.
程序:
using System;
public struct student
    {
     public static int a = 10;
    };
class exe
{
 public static void Main()
    {
     Console.WriteLine( student.a = 100);
    }
};

using System;
class base
{
public struct student
    {
     public static int a = 10;
    };
}
class exe
{
 public static void Main()
    {
     Console.WriteLine( base.student.a = 100);
    }
};
在结构体中可以定义构造函数以初始化成员,但不可以重写默认无参构造函数和默认无参析构函数
程序:
public struct student
    {
       public int x;
       public int y;
       public static int z;
       public student(int a,int b,int c)
        {
            x=a;
            y=b;
         student.z=c;
        }

...

分三块来讲述:

    };
在结构体中可以定义成员函数。
程序:
public struct student
    {
       public void list()
            {
Console.WriteLine("这是构造的函数");
            }

}x2

1 首先:

     };
结构体的对象使用new运算符创建(obj)也可以直接创建单个元素赋值(obj2)这是与类不同的因为类只能使用new创建对象
程序:
public struct student
    {
       public int x;
       public int y;
       public static int z;
       public student(int a,int b,int c)
        {
            x=a;
            y=b;
         student.z=c;
        }

二者的区别就在于,前者是定义了一个结构体 _x1 并定义了一个实例 x1;而后者定义了一个结构体 _x2 并定义了该结构体的别名,也就是x2. 因此使用的时候,后者是需要定义实例的.

在C中定义一个结构体类型要用typedef:

    };
class program
{
 public static void Main()
{
  student obj=new student(100,200,300);
  student obj2;
  obj2.x=100;
  obj2.y=200;
  student.z=300;
}
}

typedef struct Student

在使用类对象和函数使用时,使用的是引用传递,所以字段改变
在使用结构对象和函数使用时,是用的是值传递,所以字段没有改变

{

程序:
using System;
class class_wsy
{
    public int x;
}
struct struct_wsy
{
    public int x;
}
class program
{
    public static void class_t(class_wsy obj)
    {
        obj.x = 90;
    }
    public static void struct_t(struct_wsy obj)
    {
        obj.x = 90;
    }
    public static void Main()
    {
        class_wsy obj_1 = new class_wsy();
        struct_wsy obj_2 = new struct_wsy();
        obj_1.x = 100;
        obj_2.x = 100;
        class_t(obj_1);
        struct_t(obj_2);
        Console.WriteLine("class_wsy obj_1.x={0}",obj_1.x);
        Console.WriteLine("struct_wsy obj_2.x={0}",obj_2.x);
        Console.Read();
    }
}
结果为:class_wsy obj_1.x=90
       struct_wsy obj_2.x=100

int a;

}Stu;

于是在声明变量的时候就可:Stu stu1;

如果没有typedef就必须用struct Student stu1;来声明

这里的Stu实际上就是struct Student的别名。

另外这里也可以不写Student(于是也不能struct Student stu1;了)

typedef struct

{

int a;

}Stu;

但在c++里很简单,直接

struct Student

{

int a;

澳门新葡亰平台9411,};

于是就定义了结构体类型Student,声明变量时直接Student stu2;

===========================================

2其次:

在c++中如果用typedef的话,又会造成区别:

struct Student

{

int a;

}stu1;//stu1是一个变量

typedef struct Student2

{

int a;

}stu2;//stu2是一个结构体类型

使用时可以直接访问stu1.a

但是stu2则必须先 stu2 s2;

本文由澳门新葡亰平台9411发布于每日更新,转载请注明出处:typedef struct 是为了使用这个结构体方便,实例方

关键词:

最火资讯