description方法介绍及重写

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        /*
         
         // 查看对象地址
        NSLog(@"d = %p" ,d);
         
         // 类名: 对象地址
         NSLog(@"%@", d);
         
         // 当我们以%@的格式,打印了对象d,此时调用了对象的description方法
         // 对象中如果没有重写父类的decription方法,则调用父类的
         
         
         // 需求:
         // 当我们以%@格式打印 对象的时候,输出对象的所有的属性信息
         
         // 在Dog.m中重写父类的description
         
         - (NSString *)description
         {
            return [NSString stringWithFormat: @"年龄:%d, 颜色:%d" ,_age ,_color];
         }
         
         
         
         
         // 重写description的类方法
         + (NSString *)decription
         {
         //在类方法中不能访问实例变量,所以下面的写法是错误的
            return [NSString stringWithFormat: @"年龄:%d, 颜色:%d" ,_age ,_color];
         
            // 以%@的形式,打印类信息,千万不要在description方法中同时使用%@和self
            NSLog(@"%@", [d class]);
         }
         
         
         */
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会分别用C语言、Python和Java实现这些任务,开始吧! ## 用C语言实现 ### 任务1 Core Java的示例代码清单5.1到5.3是Java程序,用C语言实现相应的功能比较困难。因此,我无法用C语言实现这个任务。 ### 任务2 下面是用C语言实现的Person类: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { int id; char name[50]; char gender; int age; } Person; void setDescription(Person person) { printf("ID: %d\n", person.id); printf("Name: %s\n", person.name); printf("Gender: %c\n", person.gender); printf("Age: %d\n", person.age); } int main() { Person person = {1, "Tom", 'M', 25}; setDescription(person); return 0; } ``` 这个程序定义了一个包含id、姓名、性别、年龄字段的Person结构体,并定义了一个setDescription函数,用于输出Person对象的属性值。在主函数,创建了一个Person对象并调用了setDescription函数。 ### 任务3 下面是用C语言实现的Student类: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { int id; char name[50]; char gender; int age; char major[50]; double gpa; } Student; void setDescription(Student student) { printf("ID: %d\n", student.id); printf("Name: %s\n", student.name); printf("Gender: %c\n", student.gender); printf("Age: %d\n", student.age); printf("Major: %s\n", student.major); printf("GPA: %.2f\n", student.gpa); } int main() { Student student = {1, "Tom", 'M', 20, "Computer Science", 3.5}; setDescription(student); return 0; } ``` 这个程序定义了一个继承自Person的Student结构体,并添加了major和gpa字段。同时,重写了setDescription函数,用于输出Student对象的属性值。 ### 任务4 下面是用C语言实现的重写description函数: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { int id; char name[50]; char gender; int age; char major[50]; double gpa; } Student; void setDescription(Student student) { printf("ID: %d\n", student.id); printf("Name: %s\n", student.name); printf("Gender: %c\n", student.gender); printf("Age: %d\n", student.age); printf("Major: %s\n", student.major); printf("GPA: %.2f\n", student.gpa); } void setDescriptionWithInit(Student student, int id, char name[], char gender, int age, char major[], double gpa) { student.id = id; strcpy(student.name, name); student.gender = gender; student.age = age; strcpy(student.major, major); student.gpa = gpa; setDescription(student); } int main() { Student student = {1, "Tom", 'M', 20, "Computer Science", 3.5}; setDescription(student); Student student2; setDescriptionWithInit(student2, 2, "Jerry", 'M', 21, "Mathematics", 3.8); Student *student3 = (Student*)malloc(sizeof(Student)); setDescriptionWithInit(*student3, 3, "Alice", 'F', 22, "Physics", 3.7); free(student3); return 0; } ``` 这个程序定义了一个新的setDescriptionWithInit函数,用于接受初始化参数并构造Student对象。同时,使用三种不同的方式初始化Student对象并调用setDescriptionWithInit函数,测试了重写后的description函数。 ## 用Python实现 ### 任务1 Core Java的示例代码清单5.1到5.3是Java程序,用Python实现相应的功能比较容易。下面是用Python实现的示例代码清单5.1到5.3: ```python # 示例代码清单5.1:数组初始化 a = [1, 2, 3, 4, 5] b = ["one", "two", "three"] c = [1.2, "hello", 5, True] # 示例代码清单5.2:数组元素访问 print(a[0]) print(b[1]) print(c[2]) # 示例代码清单5.3:数组遍历 for i in a: print(i) ``` 这个程序使用了Python的列表(list)类型,实现了示例代码清单5.1到5.3的功能。 ### 任务2 下面是用Python实现的Person类: ```python class Person: def __init__(self, id, name, gender, age): self.id = id self.name = name self.gender = gender self.age = age def get_id(self): return self.id def get_name(self): return self.name def get_gender(self): return self.gender def get_age(self): return self.age def description(self): print("ID:", self.id) print("Name:", self.name) print("Gender:", self.gender) print("Age:", self.age) person = Person(1, "Tom", "M", 25) person.description() ``` 这个程序定义了一个包含id、姓名、性别、年龄字段的Person类,并定义了get方法description方法,用于获取属性值和输出Person对象的属性值。在主函数,创建了一个Person对象并调用了description方法。 ### 任务3 下面是用Python实现的Student类: ```python class Student(Person): def __init__(self, id, name, gender, age, major, gpa): super().__init__(id, name, gender, age) self.major = major self.gpa = gpa def get_major(self): return self.major def get_gpa(self): return self.gpa def description(self): super().description() print("Major:", self.major) print("GPA:", self.gpa) student = Student(1, "Tom", "M", 20, "Computer Science", 3.5) student.description() ``` 这个程序定义了一个继承自Person的Student类,并添加了major和gpa属性。同时,重写description方法,用于输出Student对象的属性值。 ### 任务4 下面是用Python实现的重写description方法: ```python class Student(Person): def __init__(self, id, name, gender, age, major, gpa): super().__init__(id, name, gender, age) self.major = major self.gpa = gpa def get_major(self): return self.major def get_gpa(self): return self.gpa def description(self): super().description() print("Major:", self.major) print("GPA:", self.gpa) @classmethod def from_list(cls, lst): return cls(*lst) @staticmethod def from_dict(dct): return Student(**dct) student = Student(1, "Tom", "M", 20, "Computer Science", 3.5) student.description() student2 = Student.from_list([2, "Jerry", "M", 21, "Mathematics", 3.8]) student2.description() student3 = Student.from_dict({"id": 3, "name": "Alice", "gender": "F", "age": 22, "major": "Physics", "gpa": 3.7}) student3.description() ``` 这个程序重写description方法,并添加了两个类方法from_list和from_dict,用于从列表和字典创建Student对象。同时,使用三种不同的方式初始化Student对象并调用description方法,测试了重写后的description方法和新增的类方法。 ## 用Java实现 ### 任务1 下面是用Java实现的示例代码清单5.1到5.3: ```java import java.util.*; public class Main { public static void main(String[] args) { // 示例代码清单5.1:数组初始化 int[] a = {1, 2, 3, 4, 5}; String[] b = {"one", "two", "three"}; Object[] c = {1.2, "hello", 5, true}; // 示例代码清单5.2:数组元素访问 System.out.println(a[0]); System.out.println(b[1]); System.out.println(c[2]); // 示例代码清单5.3:数组遍历 for (int i : a) { System.out.println(i); } } } ``` 这个程序使用了Java的数组类型,实现了示例代码清单5.1到5.3的功能。 ### 任务2 下面是用Java实现的Person类: ```java public class Person { private int id; private String name; private char gender; private int age; public Person(int id, String name, char gender, int age) { this.id = id; this.name = name; this.gender = gender; this.age = age; } public int getId() { return id; } public String getName() { return name; } public char getGender() { return gender; } public int getAge() { return age; } public void description() { System.out.println("ID: " + id); System.out.println("Name: " + name); System.out.println("Gender: " + gender); System.out.println("Age: " + age); } public static void main(String[] args) { Person person = new Person(1, "Tom", 'M', 25); person.description(); } } ``` 这个程序定义了一个包含id、姓名、性别、年龄字段的Person类,并定义了get方法description方法,用于获取属性值和输出Person对象的属性值。在主函数,创建了一个Person对象并调用了description方法。 ### 任务3 下面是用Java实现的Student类: ```java public class Student extends Person { private String major; private double gpa; public Student(int id, String name, char gender, int age, String major, double gpa) { super(id, name, gender, age); this.major = major; this.gpa = gpa; } public String getMajor() { return major; } public double getGpa() { return gpa; } public void description() { super.description(); System.out.println("Major: " + major); System.out.println("GPA: " + gpa); } public static void main(String[] args) { Student student = new Student(1, "Tom", 'M', 20, "Computer Science", 3.5); student.description(); } } ``` 这个程序定义了一个继承自Person的Student类,并添加了major和gpa属性。同时,重写description方法,用于输出Student对象的属性值。 ### 任务4 下面是用Java实现的重写description方法: ```java import java.util.*; public class Student extends Person { private String major; private double gpa; public Student(int id, String name, char gender, int age, String major, double gpa) { super(id, name, gender, age); this.major = major; this.gpa = gpa; } public String getMajor() { return major; } public double getGpa() { return gpa; } public void description() { super.description(); System.out.println("Major: " + major); System.out.println("GPA: " + gpa); } public static Student fromList(List<Object> list) { int id = (int)list.get(0); String name = (String)list.get(1); char gender = ((String)list.get(2)).charAt(0); int age = (int)list.get(3); String major = (String)list.get(4); double gpa = (double)list.get(5); return new Student(id, name, gender, age, major, gpa); } public static Student fromMap(Map<String, Object> map) { int id = (int)map.get("id"); String name = (String)map.get("name"); char gender = ((String)map.get("gender")).charAt(0); int age = (int)map.get("age"); String major = (String)map.get("major"); double gpa = (double)map.get("gpa"); return new Student(id, name, gender, age, major, gpa); } public static void main(String[] args) { Student student = new Student(1, "Tom", 'M', 20, "Computer Science", 3.5); student.description(); Student student2 = Student.fromList(Arrays.asList(2, "Jerry", "M", 21, "Mathematics", 3.8)); student2.description(); Student student3 = Student.fromMap(new HashMap<String, Object>() {{ put("id", 3); put("name", "Alice"); put("gender", "F"); put("age", 22); put("major", "Physics"); put("gpa", 3.7); }}); student3.description(); } } ``` 这个程序重写description方法,并添加了两个静态方法fromList和fromMap,用于从列表和字典创建Student对象。同时,使用三种不同的方式初始化Student对象并调用description方法,测试了重写后的description方法和新增的静态方法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值