1

医生说,我正在学习苹果 obj-c 指南,但我在理解类类型时遇到了问题

类定义是一种对象的规范。实际上,该类定义了一种数据类型。类型不仅基于类定义的数据结构(实例变量),还基于定义​​中包含的行为(方法)。类名可以出现在源代码中 C 中允许使用类型说明符的任何地方——例如,作为 sizeof 运算符的参数:

int i = sizeof(Rectangle);

而 sizeof 是运算符而不是 c 方法?

也请告诉我这是什么意思

Objects are always "typed by" a pointer.
4

2 回答 2

0

对不起,但也许你应该从比 obj-c 更容易的东西开始。

在 OOP(面向对象编程)中,您从基本类型(int、long、char,有时是字符串等)开始。然后你就有了包含基本类型属性和方法的类(类似于 C 中的 struct)。

一个类通常可以被实例化,这意味着您可以创建该类型的对象。例如

class Person {

    int age;

    string name;
    string surname;

    void printFullName() {

        Console.WriteLine(name + " " + surname);

    }

}

如果你写

var myperson = new Person();

您创建了一个 Person 类型的新对象,其中

myperson.printFullName();

你可以访问它的方法 printFullName()

在示例中sizeof是一个 C 一元运算符(如 ++ 或 --),而Rectangle是一个类型,一个类。
顺便说一句,那个例子有点混乱,搜索另一个。

对象总是由指针“键入”。

意味着您创建的任何对象都由定义其类型的指针典型化。
嗯,很难解释:)

希望这段代码可以帮助你:)

于 2012-06-07T07:35:41.080 回答
0

是的 sizeof() 来自c。Objective-C 是 c 的扩展,所以你可以在 c 中做的所有事情,你都可以在 Objective-c 中做。

对象总是由指针“键入”。

这意味着您始终通过指向对象实例的指针来引用对象。我希望您熟悉 C++,因为我将使用它来实际演示这一点......

// C++ "typed by pointer"
Object *obj = new Object();
obj->member = NULL;

// Obj-C "typed by pointer"
NSObject *obj = [[NSObject alloc] init];
obj.property = nil;


// C++
Object obj;
obj.member = NULL;

// Obj-C
NSObject obj; // THIS WILL NOT COMPILE

希望这有点道理。

编辑

我已将原始答案中的评论修改为澄清“键入者”。– 克里斯·海耶斯 8 分钟前

“静态类型”或“强类型”对对象或数据类型的操作施加了限制。而“弱类型”则不允许,允许运算符重载。– 克里斯·海耶斯 5 分钟前

“通用类型”的一个例子是引用一个抽象类(阅读多态性)。这是“弱类型化”,因为继承的对象可以被声明给编译器的“通用”指针引用为抽象对象类型。(注意:尽量不要混淆,“打字”和类/数据类型,因为它们是不同的) – Chris Heyes 49 秒前编辑

于 2012-06-07T07:45:46.887 回答