paizaラーニングレベルアップ問題集の「クラス」をやってみました。
問題
クラスの作成
コンストラクタ
クラスのメンバの更新
2問目、3問目は、前問との差分を色付けしています。
C
クラスの作成
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int number;
char name[20];
} Employee;
int getNum(const Employee* employee) {
return employee->number;
}
const char* getName(const Employee* employee) {
return employee->name;
}
int main() {
int N;
scanf("%d", &N);
Employee** employees = NULL;
size_t size = 0;
while (N--) {
char s[12];
scanf("%s", s);
if (!strcmp(s, "make")) {
int number;
char name[20];
scanf("%d %s", &number, name);
employees = (Employee**)realloc(employees, sizeof(Employee*) * (size + 1));
employees[size] = (Employee*) malloc(sizeof(Employee));
employees[size]->number = number;
strcpy(employees[size]->name, name);
size++;
} else if (!strcmp(s, "getnum")) {
size_t n;
scanf("%zu", &n);
n -= 1;
printf("%d\n", getNum(employees[n]));
} else if (!strcmp(s, "getname")) {
size_t n;
scanf("%zu", &n);
n -= 1;
printf("%s\n", getName(employees[n]));
}
}
while (size) {
free(employees[--size]);
}
free(employees);
employees = NULL;
return 0;
}
コンストラクタ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int number;
char name[20];
} Employee;
+Employee* create_employee(int num, const char* name) {
+ Employee* employee = (Employee*)malloc(sizeof(Employee));
+ if (employee == NULL) {
+ abort();
+ }
+ employee->number = num;
+ strcpy(employee->name, name);
+ return employee;
+}
int getNum(const Employee* employee) {
return employee->number;
}
const char* getName(const Employee* employee) {
return employee->name;
}
+void destroy_employee(Employee* employee) {
+ if (employee != NULL) {
+ free(employee);
+ }
+}
int main() {
int N;
scanf("%d", &N);
Employee** employees = NULL;
size_t size = 0;
while (N--) {
char s[12];
scanf("%s", s);
if (!strcmp(s, "make")) {
int number;
char name[20];
scanf("%d %s", &number, name);
employees = (Employee**)realloc(employees, sizeof(Employee*) * (size + 1));
- employees[size] = (Employee*) malloc(sizeof(Employee));
- employees[size]->number = number;
- strcpy(employees[size]->name, name);
- size++;
+ employees[size++] = create_employee(number, name);
} else if (!strcmp(s, "getnum")) {
size_t n;
scanf("%zu", &n);
n -= 1;
printf("%d\n", getNum(employees[n]));
} else if (!strcmp(s, "getname")) {
size_t n;
scanf("%zu", &n);
n -= 1;
printf("%s\n", getName(employees[n]));
}
}
while (size) {
- free(employees[--size]);
+ destroy_employee(employees[--size]);
}
free(employees);
employees = NULL;
return 0;
}
クラスのメンバの更新
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int number;
char name[20];
} Employee;
Employee* create_employee(int num, const char* name) {
Employee* employee = (Employee*)malloc(sizeof(Employee));
if (employee == NULL) {
abort();
}
employee->number = num;
strcpy(employee->name, name);
return employee;
}
int getNum(const Employee* employee) {
return employee->number;
}
const char* getName(const Employee* employee) {
return employee->name;
}
+void setNum(Employee* employee, int num) {
+ employee->number = num;
+}
+void setName(Employee* employee, const char* name) {
+ strcpy(employee->name, name);
+}
void destroy_employee(Employee* employee) {
if (employee != NULL) {
free(employee);
}
}
int main() {
int N;
scanf("%d", &N);
Employee** employees = NULL;
size_t size = 0;
while (N--) {
char s[12];
scanf("%s", s);
if (!strcmp(s, "make")) {
int number;
char name[20];
scanf("%d %s", &number, name);
employees = (Employee**)realloc(employees, sizeof(Employee*) * (size + 1));
employees[size++] = create_employee(number, name);
} else if (!strcmp(s, "getnum")) {
size_t n;
scanf("%zu", &n);
n -= 1;
printf("%d\n", getNum(employees[n]));
} else if (!strcmp(s, "getname")) {
size_t n;
scanf("%zu", &n);
n -= 1;
printf("%s\n", getName(employees[n]));
+ } else if (!strcmp(s, "change_num")) {
+ size_t n;
+ int new_num;
+ scanf("%zu %d", &n, &new_num);
+ n -= 1;
+ setNum(employees[n], new_num);
+ } else if (!strcmp(s, "change_name")) {
+ size_t n;
+ char new_name[20];
+ scanf("%zu %s", &n, new_name);
+ n -= 1;
+ setName(employees[n], new_name);
}
}
while (size) {
destroy_employee(employees[--size]);
}
free(employees);
employees = NULL;
return 0;
}
C++
クラスの作成
#include <iostream>
#include <vector>
using namespace std;
class Employee {
public:
int number;
string name;
int getNum() const {
return number;
}
string getName() const {
return name;
}
};
int main() {
int n;
cin >> n;
vector<Employee*> employees;
while (n--) {
string s;
cin >> s;
if (s == "make") {
Employee* employee = new Employee();
cin >> employee->number >> employee->name;
employees.push_back(employee);
} else if (s == "getnum") {
int n;
cin >> n;
n -= 1;
cout << employees[n]->getNum() << endl;
} else if (s == "getname") {
int n;
cin >> n;
n -= 1;
cout << employees[n]->getName() << endl;
}
}
for (Employee* employee : employees) delete employee;
return 0;
}
コンストラクタ
#include <iostream>
#include <vector>
using namespace std;
class Employee {
-public:
int number;
string name;
+public:
+ Employee(int num, string name) : number(num), name(name) {}
int getNum() const {
return number;
}
string getName() const {
return name;
}
};
int main() {
int n;
cin >> n;
vector<Employee*> employees;
while (n--) {
string s;
cin >> s;
if (s == "make") {
- Employee* employee = new Employee();
- cin >> employee->number >> employee->name;
- employees.push_back(employee);
+ int num;
+ string name;
+ cin >> num >> name;
+ employees.push_back(new Employee(num, name));
} else if (s == "getnum") {
int n;
cin >> n;
n -= 1;
cout << employees[n]->getNum() << endl;
} else if (s == "getname") {
int n;
cin >> n;
n -= 1;
cout << employees[n]->getName() << endl;
}
}
for (Employee* employee : employees) delete employee;
return 0;
}
クラスのメンバの更新
#include <iostream>
#include <vector>
using namespace std;
class Employee {
int number;
string name;
public:
Employee(int num, string name) : number(num), name(name) {}
int getNum() const {
return number;
}
string getName() const {
return name;
}
+ void setNum(int num) {
+ this->number = num;
+ }
+ void setName(const string& name) {
+ this->name = name;
+ }
}
int main() {
int n;
cin >> n;
vector<Employee*> employees;
while (n--) {
string s;
cin >> s;
if (s == "make") {
int num;
string name;
cin >> num >> name;
employees.push_back(new Employee(num, name));
} else if (s == "getnum") {
int n;
cin >> n;
n -= 1;
cout << employees[n]->getNum() << endl;
} else if (s == "getname") {
int n;
cin >> n;
n -= 1;
cout << employees[n]->getName() << endl;
+ } else if (s == "change_num") {
+ int n, num;
+ cin >> n >> num;
+ n -= 1;
+ employees[n]->setNum(num);
+ } else if (s == "change_name") {
+ int n;
+ string name;
+ cin >> n >> name;
+ n -= 1;
+ employees[n]->setName(name);
}
}
for (Employee* employee : employees) delete employee;
return 0;
}
C#
クラスの作成
using System;
using System.Collections.Generic;
public class Employee
{
public int number;
public int GetNum()
{
return number;
}
public string name;
public string GetName()
{
return name;
}
}
class Program
{
public static void Main()
{
List<Employee> employees = new List<Employee>();
for (int i = int.Parse(Console.ReadLine()); i > 0; i--) {
string[] query = Console.ReadLine().Split();
if ("make".Equals(query[0])) {
Employee employee = new Employee();
employee.number = int.Parse(query[1]);
employee.name = query[2];
employees.Add(employee);
} else if ("getnum".Equals(query[0])) {
int n = int.Parse(query[1]) - 1;
Console.WriteLine(employees[n].GetNum());
} else if ("getname".Equals(query[0])) {
int n = int.Parse(query[1]) - 1;
Console.WriteLine(employees[n].GetName());
}
}
}
}
コンストラクタ
using System;
using System.Collections.Generic;
class Employee
{
- public int number;
- public int GetNum()
- {
- return number;
- }
+ public int Number { get; }
- public string name;
- public string GetName()
- {
- return name;
- }
+ public string Name { get; }
+ public Employee(int num, string name)
+ {
+ Number = num;
+ Name = name;
+ }
}
class Program
{
public static void Main()
{
List<Employee> employees = new List<Employee>();
for (int i = int.Parse(Console.ReadLine()); i > 0; i--) {
string[] query = Console.ReadLine().Split();
if ("make".Equals(query[0])) {
- Employee employee = new Employee();
- employee.number = int.Parse(query[1]);
- employee.name = query[2];
- employees.Add(employee);
+ int num = int.Parse(query[1]);
+ int name = query[2];
+ employees.Add(new Employee(num, name));
} else if ("getnum".Equals(query[0])) {
int n = int.Parse(query[1]) - 1;
- Console.WriteLine(employees[n].GetNum());
+ Console.WriteLine(employees[n].Number);
} else if ("getname".Equals(query[0])) {
int n = int.Parse(query[1]) - 1;
- Console.WriteLine(employees[n].GetName());
+ Console.WriteLine(employees[n].Name);
}
}
}
}
クラスのメンバの更新
using System;
using System.Collections.Generic;
class Employee
{
- public int Number { get; }
+ public int Number { get; set; }
- public string Name { get; }
+ public string Name { get; set; }
public Employee(int num, string name)
{
Number = num;
Name = name;
}
}
class Program
{
public static void Main()
{
List<Employee> employees = new List<Employee>();
for (int i = int.Parse(Console.ReadLine()); i > 0; i--) {
string[] query = Console.ReadLine().Split();
if ("make".Equals(query[0])) {
int num = int.Parse(query[1]);
int name = query[2];
employees.Add(new Employee(num, name));
} else if ("getnum".Equals(query[0])) {
int n = int.Parse(query[1]) - 1;
Console.WriteLine(employees[n].Number);
} else if ("getname".Equals(query[0])) {
int n = int.Parse(query[1]) - 1;
Console.WriteLine(employees[n].Name);
+ } else if ("change_num".Equals(query[0])) {
+ int n = int.Parse(query[1]) - 1;
+ int num = int.Parse(query[2]);
+ employees[n].Number = num;
+ } else if ("change_name".Equals(query[0])) {
+ int n = int.Parse(query[1]) - 1;
+ string name = query[2];
+ employees[n].Name = name;
}
}
}
}
Go
クラスの作成
package main
import "fmt"
type Employee struct {
number int
name string
}
func (e *Employee) GetNum() int {
return e.number
}
func (e *Employee) GetName() string {
return e.name
}
func main() {
var n int
fmt.Scan(&n)
employees := []*Employee{}
for i := 0; i < n; i++ {
var s string
fmt.Scan(&s)
if s == "make" {
employee := &Employee{}
fmt.Scan(&employee.number, &employee.name)
employees = append(employees, employee)
} else if s == "getnum" {
var k int
fmt.Scan(&k)
k -= 1
fmt.Println(employees[k].GetNum())
} else if s == "getname" {
var k int
fmt.Scan(&k)
k -= 1
fmt.Println(employees[k].GetName())
}
}
}
コンストラクタ
package main
import "fmt"
type Employee struct {
number int
name string
}
+func NewEmployee(num int, name string) *Employee {
+ return &Employee{number: num, name: name}
+}
func (e *Employee) GetNum() int {
return e.number
}
func (e *Employee) GetName() string {
return e.name
}
func main() {
var n int
fmt.Scan(&n)
employees := []*Employee{}
for i := 0; i < n; i++ {
var s string
fmt.Scan(&s)
if s == "make" {
- employee := &Employee{}
- fmt.Scan(&employee.number, &employee.name)
- employees = append(employees, employee)
+ var num int
+ var name string
+ fmt.Scan(&num, &name)
+ employees = append(employees, NewEmployee(num, name))
} else if s == "getnum" {
var k int
fmt.Scan(&k)
k -= 1
fmt.Println(employees[k].GetNum())
} else if s == "getname" {
var k int
fmt.Scan(&k)
k -= 1
fmt.Println(employees[k].GetName())
}
}
}
クラスのメンバの更新
package main
import "fmt"
type Employee struct {
number int
name string
}
func NewEmployee(num int, name string) *Employee {
return &Employee{number: num, name: name}
}
func (e *Employee) GetNum() int {
return e.number
}
func (e *Employee) GetName() string {
return e.name
}
+func (e *Employee) SetNum(num int) {
+ e.number = num
+}
+func (e *Employee) SetName(name string) {
+ e.name = name
+}
func main() {
var n int
fmt.Scan(&n)
employees := []*Employee{}
for i := 0; i < n; i++ {
var s string
fmt.Scan(&s)
if s == "make" {
var num int
var name string
fmt.Scan(&num, &name)
employees = append(employees, NewEmployee(num, name))
} else if s == "getnum" {
var k int
fmt.Scan(&k)
k -= 1
fmt.Println(employees[k].GetNum())
} else if s == "getname" {
var k int
fmt.Scan(&k)
k -= 1
fmt.Println(employees[k].GetName())
+ } else if s == "change_num" {
+ var k, num int
+ fmt.Scan(&k, &num)
+ k -= 1
+ employees[k].SetNum(num)
+ } else if s == "change_name" {
+ var k int
+ var name string
+ fmt.Scan(&k, &name)
+ k -= 1
+ employees[k].SetName(name)
}
}
}
Java
クラスの作成
import java.util.*;
class Employee {
public int number;
public String name;
public int getNum() {
return number;
}
public String getName() {
return name;
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Employee> employees = new ArrayList<>();
for (int i = sc.nextInt(); i > 0; i--) {
String s = sc.next();
if ("make".equals(s)) {
Employee employee = new Employee();
employee.number = sc.nextInt();
employee.name = sc.next();
employees.add(employee);
} else if ("getnum".equals(s)) {
System.out.println(employees.get(sc.nextInt()-1).getNum());
} else if ("getname".equals(s)) {
System.out.println(employees.get(sc.nextInt()-1).getName());
}
}
sc.close();
}
}
コンストラクタ
import java.util.*;
class Employee {
- public int number;
+ private int number;
- public String name;
+ private String name;
+ public Employee(int num, String name) {
+ this.number = num;
+ this.name = name;
+ }
public int getNum() {
return number;
}
public String getName() {
return name;
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Employee> employees = new ArrayList<>();
for (int i = sc.nextInt(); i > 0; i--) {
String s = sc.next();
if ("make".equals(s)) {
- Employee employee = new Employee();
- employee.number = sc.nextInt();
- employee.name = sc.next();
- employees.add(employee);
+ employees.add(new Employee(sc.nextInt(), sc.next()));
} else if ("getnum".equals(s)) {
System.out.println(employees.get(sc.nextInt()-1).getNum());
} else if ("getname".equals(s)) {
System.out.println(employees.get(sc.nextInt()-1).getName());
}
}
sc.close();
}
}
クラスのメンバの更新
import java.util.*;
class Employee {
private int number;
private String name;
public Employee(int num, String name) {
this.number = num;
this.name = name;
}
public int getNum() {
return number;
}
public String getName() {
return name;
}
+ public void setNum(int num) {
+ this.number = num;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Employee> employees = new ArrayList<>();
for (int i = sc.nextInt(); i > 0; i--) {
String s = sc.next();
if ("make".equals(s)) {
employees.add(new Employee(sc.nextInt(), sc.next()));
} else if ("getnum".equals(s)) {
System.out.println(employees.get(sc.nextInt()-1).getNum());
} else if ("getname".equals(s)) {
System.out.println(employees.get(sc.nextInt()-1).getName());
+ } else if ("change_num".equals(s)) {
+ employees.get(sc.nextInt()-1).setNum(sc.nextInt());
+ } else if ("change_name".equals(s)) {
+ employees.get(sc.nextInt()-1).setName(sc.next());
}
}
sc.close();
}
}
JavaScript
クラスの作成
class Employee {
get number() {
return this._number;
}
get name() {
return this._name;
}
}
const [N, ...S] = require("fs").readFileSync("/dev/stdin", "utf8").trim().split('\n');
const employees = [];
for (var i = 0; i < Number(N); i++) {
const query = S[i].split(' ');
if (query[0] === "make") {
const employee = new Employee();
employee._number = Number(query[1]);
employee._name = query[2];
employees.push(employee);
} else if (query[0] === "getnum") {
const n = Number(query[1]) - 1;
console.log(employees[n].number);
} else if (query[0] === "getname") {
const n = Number(query[1]) - 1;
console.log(employees[n].name);
}
}
コンストラクタ
class Employee {
+ constructor(num, name) {
+ this._number = num;
+ this._name = name;
+ }
get number() {
return this._number;
}
get name() {
return this._name;
}
}
const [N, ...S] = require("fs").readFileSync("/dev/stdin", "utf8").trim().split('\n');
const employees = [];
for (var i = 0; i < Number(N); i++) {
const query = S[i].split(' ');
if (query[0] === "make") {
- const employee = new Employee();
- employee._number = Number(query[1]);
- employee._name = query[2];
- employees.push(employee);
+ employees.push(new Employee(Number(query[1]), query[2]));
} else if (query[0] === "getnum") {
const n = Number(query[1]) - 1;
console.log(employees[n].number);
} else if (query[0] === "getname") {
const n = Number(query[1]) - 1;
console.log(employees[n].name);
}
}
クラスのメンバの更新
class Employee {
constructor(num, name) {
this._number = num;
this._name = name;
}
get number() {
return this._number;
}
+ set number(value) {
+ this._number = value;
+ }
get name() {
return this._name;
}
+ set name(value) {
+ this._name = value;
+ }
}
const [N, ...S] = require("fs").readFileSync("/dev/stdin", "utf8").trim().split('\n');
for (var i = 0; i < Number(N); i++) {
const query = S[i].split(' ');
const employees = [];
if (query[0] === "make") {
employees.push(new Employee(Number(query[1]), query[2]));
} else if (query[0] === "getnum") {
const n = Number(query[1]) - 1;
console.log(employees[n].number);
} else if (query[0] === "getname") {
const n = Number(query[1]) - 1;
console.log(employees[n].name);
+ } else if (query[0] === "change_num") {
+ const n = Number(query[1]) - 1;
+ const num = Number(query[2]);
+ employees[n].number = num;
+ } else if (query[0] === "change_name") {
+ const n = Number(query[1]) - 1;
+ const name = query[2];
+ employees[n].name = name;
}
}
Kotlin
クラスの作成
class Employee(
var number: Int = 0,
var name: String = ""
)
fun main() {
val employees = mutableListOf<Employee>()
repeat (readln().toInt()) {
val query = readln().split(' ')
if ("make".equals(query[0])) {
val num = query[1].toInt()
val name = query[2]
val employee = Employee()
employee.number = num
employee.name = name
employees.add(employee)
} else if ("getnum".equals(query[0])) {
val n = query[1].toInt() - 1
println(employees[n].number)
} else if ("getname".equals(query[0])) {
val n = query[1].toInt() - 1
println(employees[n].name)
}
}
}
コンストラクタ
class Employee(
- var number: Int = 0,
+ val number: Int,
- var name: String = ""
+ val name: String
)
fun main() {
val employees = mutableListOf<Employee>()
repeat (readln().toInt()) {
val query = readln().split(' ')
if ("make".equals(query[0])) {
val num = query[1].toInt()
val name = query[2]
- val employee = Employee()
- employee.number = num
- employee.name = name
- employees.add(employee)
+ employees.add(Employee(num, name))
} else if ("getnum".equals(query[0])) {
val n = query[1].toInt() - 1
println(employees[n].number)
} else if ("getname".equals(query[0])) {
val n = query[1].toInt() - 1
println(employees[n].name)
}
}
}
クラスのメンバの更新
class Employee(
- val number: Int,
+ var number: Int,
- val name: String
+ var name: String
)
fun main() {
val employees = mutableListOf<Employee>()
repeat (readln().toInt()) {
val query = readln().split(' ')
if ("make".equals(query[0])) {
val num = query[1].toInt()
val name = query[2]
employees.add(Employee(num, name))
} else if ("getnum".equals(query[0])) {
val n = query[1].toInt() - 1
println(employees[n].number)
} else if ("getname".equals(query[0])) {
val n = query[1].toInt() - 1
println(employees[n].name)
+ } else if ("change_num".equals(query[0])) {
+ val n = query[1].toInt() - 1
+ val num = query[2].toInt()
+ employees[n].number = num
+ } else if ("change_name".equals(query[0])) {
+ val n = query[1].toInt() - 1
+ val name = query[2]
+ employees[n].name = name
}
}
}
PHP
クラスの作成
<?php
class Employee {
public int $number;
public string $name;
public function getNum(): int {
return $this->number;
}
public function getName(): string {
return $this->name;
}
}
$employees = [];
$N = intval(fgets(STDIN));
while ($N--) {
$query = explode(' ', trim(fgets(STDIN)));
if ($query[0] === "make") {
$employee = new Employee();
$employee->number = intval($query[1]);
$employee->name = $query[2];
$employees[] = $employee;
} else if ($query[0] === "getnum") {
$n = intval($query[1]) - 1;
echo $employees[$n]->getNum(), PHP_EOL;
} else if ($query[0] === "getname") {
$n = intval($query[1]) - 1;
echo $employees[$n]->getName(), PHP_EOL;
}
}
?>
コンストラクタ
<?php
class Employee {
- public int $number;
+ private int $number;
- public string $name;
+ private string $name;
+ public function __construct(int $num, string $name) {
+ $this->number = $num;
+ $this->name = $name;
+ }
public function getNum(): int {
return $this->number;
}
public function getName(): string {
return $this->name;
}
}
$employees = [];
$N = intval(fgets(STDIN));
while ($N--) {
$query = explode(' ', trim(fgets(STDIN)));
if ($query[0] === "make") {
- $employee = new Employee();
- $employee->number = intval($query[1]);
- $employee->name = $query[2];
- $employees[] = $employee;
+ $num = intval($query[1]);
+ $name = $query[2];
+ $employees[] = new Employee($num, $name);
} else if ($query[0] === "getnum") {
$n = intval($query[1]) - 1;
echo $employees[$n]->getNum(), PHP_EOL;
} else if ($query[0] === "getname") {
$n = intval($query[1]) - 1;
echo $employees[$n]->getName(), PHP_EOL;
}
}
?>
クラスのメンバの更新
<?php
class Employee {
private int $number;
private string $name;
public function __construct(int $num, string $name) {
$this->id = $num;
$this->name = $name;
}
public function getNum(): int {
return $this->number;
}
public function getName(): string {
return $this->name;
}
+ public function setNum(int $num): void {
+ $this->number = $num;
+ }
+
+ public function setName(string $name): void {
+ $this->name = $name;
+ }
}
$employees = [];
$N = intval(fgets(STDIN));
while ($N--) {
$query = explode(' ', trim(fgets(STDIN)));
if ($query[0] === "make") {
$num = intval(query[1]);
$name = query[2];
$employees[] = new Employee($num, $name);
} else if ($query[0] === "getnum") {
$n = intval(query[1]) - 1;
echo $employees[$n]->getNum(), PHP_EOL;
} else if ($query[0] === "getname") {
$n = intval(query[1]) - 1;
echo $employees[$n]->getName(), PHP_EOL;
+ } else if ($query[0] === "change_num") {
+ $n = intval($query[1]) - 1;
+ $num = intval($query[2]);
+ $employees[$n]->setNum($num);
+ } else if ($query[0] === "change_name") {
+ $n = intval($query[1]) - 1;
+ $name = $query[2];
+ $employees[$n]->setName($name);
}
}
?>
Perl
クラスの作成
package Employee;
sub new {
my ($class) = @_;
my $self = {
number,
name,
};
bless $self, $class;
return $self;
}
sub getNum {
my ($self) = @_;
return $self->{number};
}
sub getName {
my ($self) = @_;
return $self->{name};
}
my @employees;
for (1..int(<STDIN>)) {
my @query = split ' ', <STDIN>;
if ($query[0] eq "make") {
my $employee = Employee->new();
$employee->{number} = int($query[1]);
chomp($employee->{name} = $query[2]);
push @employees, $employee;
} elsif ($query[0] eq "getnum") {
my $n = int($query[1]) - 1;
print $employees[$n]->getNum(), $/;
} elsif ($query[0] eq "getname") {
my $n = int($query[1]) - 1;
print $employees[$n]->getName(), $/;
}
}
コンストラクタ
package Employee;
sub new {
- my ($class) = @_;
- my $self = {
- number,
- name,
- };
+ my ($class, $num, $name) = @_;
+ my $self = {
+ number => $num,
+ name => $name,
+ };
bless $self, $class;
return $self;
}
sub getNum {
my ($self) = @_;
return $self->{number};
}
sub getName {
my ($self) = @_;
return $self->{name};
}
my @employees;
for (1..int(<STDIN>)) {
my @query = split ' ', <STDIN>;
if ($query[0] eq "make") {
- my $employee = Employee->new();
- $employee->{number} = int($query[1]);
- chomp($employee->{name} = $query[2]);
- push @employees, $employee;
+ my $num = int($query[1]);
+ chomp(my $name = $query[2]);
+ push @employees, Employee->new($num, $name);
} elsif ($query[0] eq "getnum") {
my $n = int($query[1]) - 1;
print $employees[$n]->getNum(), $/;
} elsif ($query[0] eq "getname") {
my $n = int($query[1]) - 1;
print $employees[$n]->getName(), $/;
}
}
クラスのメンバの更新
package Employee;
sub new {
my ($class, $num, $name) = @_;
my $self = {
number => $num,
name => $name,
};
bless $self, $class;
return $self;
}
sub getNum {
my ($self) = @_;
return $self->{number};
}
sub getName {
my ($self) = @_;
return $self->{name};
}
+sub setNum {
+ my ($self, $num) = @_;
+ $self->{number} = $num;
+}
+
+sub setName {
+ my ($self, $name) = @_;
+ $self->{name} = $name;
+}
my @employees;
for (1..int(<STDIN>)) {
my @query = split ' ', <STDIN>;
if ($query[0] eq "make") {
my $num = int($query[1]);
chomp(my $name = $query[2]);
push @employees, Employee->new($num, $name);
} elsif ($query[0] eq "getnum") {
my $n = int($query[1]) - 1;
print $employees[$n]->getNum(), $/;
} elsif ($query[0] eq "getname") {
my $n = int($query[1]) - 1;
print $employees[$n]->getName(), $/;
+ } elsif ($query[0] eq "change_num") {
+ my $n = int($query[1]) - 1;
+ my $num = $query[2];
+ $employees[$n]->setNum($num), $/;
+ } elsif ($query[0] eq "change_name") {
+ my $n = int($query[1]) - 1;
+ chomp(my $name = $query[2]);
+ $employees[$n]->setName($name), $/;
}
}
Python3
クラスの作成
class Employee:
def get_number(self) -> int:
return self.number
def get_name(self) -> str:
return self.name
employees = []
for _ in range(int(input())):
query = input().split()
if query[0] == "make":
employee = Employee()
employee.number = int(query[1])
employee.name = query[2]
employees.append(employee)
elif query[0] == "getnum":
n = int(query[1]) - 1
print(employees[n].get_number())
elif query[0] == "getname":
n = int(query[1]) - 1
print(employees[n].get_name())
コンストラクタ
class Employee:
+ def __init__(self, num: int, name: str):
+ self._number = num
+ self._name = name
- def get_number(self) -> int:
- return self.number
+ @property
+ def number(self) -> int:
+ return self._number
- def get_name(self) -> str:
- return self.name
+ @property
+ def name(self) -> str:
+ return self._name
employees = []
for _ in range(int(input())):
query = input().split()
if query[0] == "make":
- employee = Employee()
- employee.number = int(query[1])
- employee.name = query[2]
- employees.append(employee)
+ num, name = int(query[1]), query[2]
+ employees.append(Employee(num, name))
elif query[0] == "getnum":
n = int(query[1]) - 1
- print(employees[n].get_number())
+ print(employees[n].number)
elif query[0] == "getname":
n = int(query[1]) - 1
- print(employees[n].get_name())
+ print(employees[n].name)
クラスのメンバの更新
class Employee:
def __init__(self, num: int, name: str):
self._number = num
self._name = name
@property
def number(self) -> int:
return self._number
+ @number.setter
+ def number(self, value: int):
+ self._number = value
@property
def name(self) -> str:
return self._name
+ @name.setter
+ def name(self, value: str):
+ self._name = value
employees = []
for _ in range(int(input())):
query = input().split()
if query[0] == "make":
num, name = int(query[1]), query[2]
employees.append(Employee(num, name))
elif query[0] == "getnum":
n = int(query[1]) - 1
print(employees[n].number)
elif query[0] == "getname":
n = int(query[1]) - 1
print(employees[n].name)
+ elif query[0] == "change_num":
+ n, num = int(query[1]) - 1, int(query[2])
+ employees[n].number = num
+ elif query[0] == "change_name":
+ n, name = int(query[1]) - 1, query[2]
+ employees[n].name = name
Ruby
クラスの作成
class Employee
attr_writer :number, :name
def getNumber
@number
end
def getName
@name
end
end
employees = []
gets.to_i.times do
query = gets.chomp.split
if query[0] == "make"
employee = Employee.new
employee.number = query[1].to_i
employee.name = query[2]
employees << employee
elsif query[0] == "getnum"
n = query[1].to_i - 1
p employees[n].getNumber
elsif query[0] == "getname"
n = query[1].to_i - 1
puts employees[n].getName
end
end
コンストラクタ
class Employee
- attr_writer :number, :name
+ attr_reader :number, :name
+ def initialize(num, name)
+ @number = num
+ @name = name
+ end
- def getNumber
- @number
- end
- def getName
- @name
- end
end
employees = []
gets.to_i.times do
query = gets.chomp.split
if query[0] == "make"
- employee = Employee.new
- employee.number = query[1].to_i
- employee.name = query[2]
- employees << employee
+ num = query[1].to_i
+ name = query[2]
+ employees << Employee.new(num, name)
elsif query[0] == "getnum"
n = query[1].to_i - 1
- p employees[n].getNumber
+ p employees[n].number
elsif query[0] == "getname"
n = query[1].to_i - 1
- puts employees[n].getName
+ puts employees[n].name
end
end
クラスのメンバの更新
class Employee
- attr_reader :number, :name
+ attr_accessor :number, :name
def initialize(num, name)
@nnumber = num
@name = name
end
end
employees = []
gets.to_i.times do
query = gets.chomp.split
if query[0] == "make"
num = query[1].to_i
name = query[2]
employees << Employee.new(num, name)
elsif query[0] == "getnum"
n = query[1].to_i - 1
p employees[n].number
elsif query[0] == "getname"
n = query[1].to_i - 1
puts employees[n].name
+ elsif query[0] == "change_num"
+ n = query[1].to_i - 1
+ num = query[2].to_i
+ employees[n].number = num
+ elsif query[0] == "change_name"
+ n = query[1].to_i - 1
+ name = query[2]
+ employees[n].name = name
end
end
Scala
クラスの作成
import scala.io.StdIn._
import scala.collection.mutable._
class Employee() {
var number: Int = 0
var name: String = null
def getNum(): Int = { number }
def getName(): String = { name }
}
object Main extends App{
val employees = ArrayBuffer[Employee]()
for (_ <- 0 until readInt()) {
val query = readLine().split(' ')
if ("make".equals(query(0))) {
val employee = new Employee()
employee.number = query(1).toInt
employee.name = query(2)
employees += employee
} else if ("getnum".equals(query(0))) {
val n = query(1).toInt - 1
println(employees(n).getNum())
} else if ("getname".equals(query(0))) {
val n = query(1).toInt - 1
println(employees(n).getName())
}
}
}
コンストラクタ
import scala.io.StdIn._
import scala.collection.mutable._
-class Employee() {
- var number: Int = 0
- var name: String = null
-
- def getNum(): Int = { number }
- def getName(): String = { name }
-}
+case class Employee(val number: Int, val name: String)
object Main extends App{
val employees = ArrayBuffer[Employee]()
for (_ <- 0 until readInt()) {
val query = readLine().split(' ')
if ("make".equals(query(0))) {
- val employee = new Employee()
- employee.number = query(1).toInt
- employee.name = query(2)
- employees += employee
+ val num = query(1).toInt
+ val name = query(2)
+ employees += new Employee(num, name)
} else if ("getnum".equals(query(0))) {
val n = query(1).toInt - 1
- println(employees(n).getNum())
+ println(employees(n).number)
} else if ("getname".equals(query(0))) {
val n = query(1).toInt - 1
- println(employees(n).getName())
+ println(employees(n).name)
}
}
}
クラスのメンバの更新
import scala.io.StdIn._
import scala.collection.mutable._
-case class Employee(val number: Int, val name: String)
+case class Employee(var number: Int, var name: String)
object Main extends App{
val employees = ArrayBuffer[Employee]()
for (_ <- 0 until readInt()) {
val query = readLine().split(' ')
if ("make".equals(query(0))) {
val num = query(1).toInt
val name = query(2)
employees += new Employee(num, name)
} else if ("getnum".equals(query(0))) {
val n = query(1).toInt - 1
println(employees(n).number)
} else if ("getname".equals(query(0))) {
val n = query(1).toInt - 1
println(employees(n).name)
+ } else if ("change_num".equals(query(0))) {
+ val n = query(1).toInt - 1
+ val num = query(2).toInt
+ employees(n).number = num
+ } else if ("change_name".equals(query(0))) {
+ val n = query(1).toInt - 1
+ val name = query(2)
+ employees(n).name = name
}
}
}
Swift
クラスの作成
class Employee {
public var number: Int = 0
public var name: String = ""
func getNum() -> Int {
return number
}
func getName() -> String {
return name
}
}
var employees: [Employee] = []
for _ in 0..<Int(readLine()!)! {
let query = readLine()!.split(separator: " ")
if query[0] == "make" {
let employee = Employee()
employee.number = Int(query[1])!
employee.name = String(query[2])
employees.append(employee)
} else if query[0] == "getnum" {
let n = Int(query[1])! - 1
print(employees[n].getNum())
} else if query[0] == "getname" {
let n = Int(query[1])! - 1
print(employees[n].getName())
}
}
コンストラクタ
class Employee {
- public var number: Int = 0
+ let number: Int
- public var name: String = ""
+ let name: String
+ init(num: Int, name: String) {
* self.number = num
* self.name = name
* }
- func getNum() -> Int {
- return number
- }
- func getName() -> String {
- return name
- }
}
var employees: [Employee] = []
for _ in 0..<Int(readLine()!)! {
let query = readLine()!.split(separator: " ")
if query[0] == "make" {
- let employee = Employee()
- employee.number = Int(query[1])!
- employee.name = String(query[2])
- employees.append(employee)
+ let num = Int(query[1])!
+ let name = String(query[2])
+ employees.append(Employee(num: num, name: name))
} else if query[0] == "getnum" {
let n = Int(query[1])! - 1
- print(employees[n].getNum())
+ print(employees[n].number)
} else if query[0] == "getname" {
let n = Int(query[1])! - 1
- print(employees[n].getName())
+ print(employees[n].name)
}
}
クラスのメンバの更新
class Employee {
- let number: Int
+ var number: Int
- let name: String
+ var name: String
init(num: Int, name: String) {
self.number = num
self.name = name
}
}
var employees: [Employee] = []
for _ in 0..<Int(readLine()!)! {
let query = readLine()!.split(separator: " ")
if query[0] == "make" {
let num = Int(query[1])!
let name = String(query[2])
employees.append(Employee(num: num, name: name))
} else if query[0] == "getnum" {
let n = Int(query[1])! - 1
print(employees[n].number)
} else if query[0] == "getname" {
let n = Int(query[1])! - 1
print(employees[n].name)
+ } else if query[0] == "change_num" {
+ let n = Int(query[1])! - 1
+ let num = Int(query[2])!
+ employees[n].number = num
+ } else if query[0] == "change_name" {
+ let n = Int(query[1])! - 1
+ let name = String(query[2])
* employees[n].name = name
}
}