OC5_构造方法与self指针

//
//  Dog.h
//  OC5_构造方法与self指针
//
//  Created by zhangxueming on 15/6/9.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Dog : NSObject
{
    NSString *_name;
    NSInteger _age;
}
//必须以 initWithXXX开头
//在一个类里面可以有多个构造方法, 但是一个对象只可以调用一次构造方法

//无参数
- (id)init;//返回对象的地址

//带一个参数
- (id)initWithName:(NSString *)name;
- (id)initWithAge:(NSInteger)age;

//带两个参数
- (id)initWithName:(NSString *)name andAge:(NSInteger)age;

//getter方法
- (NSString *)name;

- (NSInteger)age;

//setter方法
- (void)setName:(NSString *)name andAge:(NSInteger)age;

//类方法
+ (void)testDog;

@end
//
//  Dog.m
//  OC5_构造方法与self指针
//
//  Created by zhangxueming on 15/6/9.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import "Dog.h"

@implementation Dog

- (instancetype)init
{
    if (self = [super init]) {//引用父类方法的编译器符号
    }
    return self;
}

- (id)initWithName:(NSString *)name
{
    if (self = [super init]) {
        _name = name;
    }
    return self;
}

- (id)initWithAge:(NSInteger)age
{
    if (self = [super init]) {
        _age = age;
    }
    return self;
}

- (id)initWithName:(NSString *)name andAge:(NSInteger)age
{
    if(self = [super init])
    {
        _name = name;
        _age = age;
    }
    return self;
}

- (NSString *)name
{
    return _name;
}

- (NSInteger)age
{
    return _age;
}

- (void)setName:(NSString *)name andAge:(NSInteger)age
{
    _name = name;
    _age = age;
}

+(void)testDog
{
    Dog *xiaoHei = [[self alloc] initWithName:@"小黑" andAge:12 ];
    NSLog(@"name = %@ age = %li", [xiaoHei name], [xiaoHei age]);
}

@end
//
//  main.m
//  OC5_构造方法与self指针
//
//  Created by zhangxueming on 15/6/9.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Dog.h"
//1.#ifndef "Dog.h" #define "Dog.h"  #endif,防止头文件被重定义
//[email protected] 打断循环链 防止循环包含

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        [Dog testDog];

        Dog *xiaoBai = [[Dog alloc] init];
        [xiaoBai setName:@"小白" andAge:15];
        NSLog(@"name = %@ age = %li", [xiaoBai name], [xiaoBai age] );

    }
    return 0;
}
时间: 2024-10-03 21:34:34

OC5_构造方法与self指针的相关文章

019-OC特有语法-OC笔记

学习目标 1.[了解]类的本质 2.[掌握]SEL数据类型 3.[掌握]点语法 4.[掌握]@property和@synthesize 5.[了解]动态类型和静态类型 6.[理解]id和instancetype 7.[理解]动态类型检测 8.[掌握]构造方法 一.类的本质 当程序执行的时候,程序中所有类都会自动加载到内存中的代码区(类加载).并且一旦类加载到代码区,会直到程序结束才会被回收. 那么类以什么形式加载到代码区的呢? 系统首先会在代码区创建一个Class对象,将类的信息(类名.属性.方

java面向对象-1

代码以及笔记如下: class Person{ //成员变量 String name; Integer age; //静态变量 static String address="中国"; //构造方法 //两个构造方法在同一个类中,又同名,只是参数不同 //这种方法现象,就是方法重载. //如果是父类有一个方法,子类也有一个一模一样的,连 //参数也一样的方法,只是实现这个方法的语句(方法代码块) //不同,这种方法现象,就是方法重写. public Person(){ //默认构造方法

c++类继承-小记

class A{ public: A(){print1();} //在构造函数里面调用virtual函数的做法本身不对,这里只为测试 virtual void print1(){ std::cout << "A print1" << std::endl; } }; class B : public A{ public: virtual void print1(){ std::cout << "B print1" <<

(二)学习C#之内存管理

一.当你运行你的程序通常都会访问哪些内存空间呢? 电脑自言自语道,“这个人要声明一个整数”或“这个人个方法”或“这个人要创建一个对象” 1.这些信息究竟是存在内存里的什么地方呢? 2.或者说用于描述这个整数.这些对象和方法的信息,都在哪呢? 3.这些内存的组织方式又是什么样的呢? 二.有三类不同的空间,但是其中两类与我们的关系最密切. 1.第一类存储空间:用于存储所有静态变量和常量 我们可以把它们想作不会变的变量,这是一块专门划分出来的空间,是一块比较特殊的空间,在这块特殊的空间存放着静态变量和

C++的this指针

1. 一个对象占多大空间呢? 是由对象里面的成员变量决定的. 2. 成员函数保存在哪儿? 不在对象的内存里面,它在代码区.所有函数写完都在代码区,只有在调用的时候才去代码区找.既然函数不在对象里,那么函数里面的那个this指针代表当前对象是怎么回事??? 3. 调用成员函数时,会自动传this指针 4. this指针是指向当前对象的指针 5. 在成员函数中,可以将this指针当参数传递,也可以返回this指针,或返回通过this指针拿到的对象 #include <iostream> using

1.5 万能指针 id

一. id id是一种数据类型,并且是一种动态数据类型 数据类型的用途: 1. 定义变量 2. 作为函数的参数 3. 作为函数的返回值 默认情况下所有的数据类型都是静态数据类型 静态数据类型的特点: 在编译时就知道变量的类型,知道变量中有哪些属性和方法 在编译的时候就可以访问这些属性和方法 并且如果是通过静态数据类型定义变量,如果访问了不属于静态数据类型的属性和方法,那么编译器就会报错 应用场景:多态,可以减少代码量,避免调用了子类特有的方法需要强制类型转换 id obj1 = [[Person

由typedef和函数指针引起的危机

由typedef和函数指针引起的危机 昨天阅读了大神强哥的代码,发现里面用到了函数指针,也用到的typedef.本来我自以为对这两个概念有一定的认识,但是突然发现这两个东西居然用到了一起!!!!(在一起了也不说一声,一点心理准备都没有): typedef int (* fp)(void *para, void *end); 瞬间就蒙了,这是个啥东西???于是我开始看书,上网查资料,想弄明白.在这个过程中,我发现自己不仅仅是对这两个概念理解不够!!!而是,对数组.指针.变量的理解都不够.这引发了我

OC基础复习(六)之构造方法小结

写到这里心慌慌的,压力骤然而起, 1.什么是构造方法? OC构造方法 构造方法我们创建一个对象的时候一般喜欢直接调用一个类方法,比如有一个Person类,我们为这个Person类创建对象一般是直接这样[Person new];其实new是NSObject中的一个类方法,这个new方法中是先调用了alloc方法,alloc方法也是一个类方法,作用是创建这个类的对象,再将这个对象的指针返回:再调用创建的对象的对象方法init,作用是初始化创建的对象的属性,然后返回这个已经被初始化的对象.比如: Pe

OC基础--构造方法

OC语言中类的构造方法学了两种: 一.方法一:[类名 new] 例:[Person new] 缺点:可扩展性不强,假如在Person类中有_age 成员变量,在初始化时想让_age 中的值为20,new方法办不到,只能是创建类之后重新赋值 二.方法二: //返回一个已经分配好内存的对象,但是这个对象没有经过初始化 Person *p = [Person alloc]; //给指针变量p指向的对象进行初始化操作 p = [p init]; 合并写法,以后常用:类名 *指针变量名 =  [[类名 a