HM176 调用才装配
HM176 调用才装配
来源: 第 176 集 模板-类模板中成员函数创建时机
难度: 普及-
时间限制: 1s
空间限制: 64MB
题目描述
普通类的成员函数在类定义时就会创建。类模板里的成员函数**不一样**:一开始并不创建,**调用时**才实例化。原因是成员里往往有一个类型未定的对象,只有实例化并调用后,编译器才知道它到底是什么类型、能不能调某个接口。
因此下面这样的类模板可以先通过编译(只要你不去调用对不上的那个函数):
Person1只有showPerson1()。Person2只有showPerson2()。- 类模板
MyClass<T>有成员obj(类型为T),function1()里写obj.showPerson1(),function2()里写obj.showPerson2()。
若写成 MyClass<Person1>,只能调用 function1();调用 function2() 会在实例化时报错(Person1 没有 showPerson2)。MyClass<Person2> 则只能调用 function2()。
请按上述结构实现,并处理询问:
- 操作 \(1\):用
MyClass<Person1>保存整数 \(x\),只调用function1(),输出person1:与 \(2x\)(中间无空格)。 - 操作 \(2\):用
MyClass<Person2>保存整数 \(x\),只调用function2(),输出person2:与 \(x+3\)(中间无空格)。
不要去调用类型对不上的那个成员函数。
输入格式
第一行一个整数 \(q\)(\(1 \le q \le 1000\))。
接下来 \(q\) 行,每行两个整数 \(op, x\)(\(op \in \{1,2\}\),\(\lvert x\rvert \le 10^6\))。
输出格式
共 \(q\) 行,每行对应一次调用的输出。
样例
输入 #1
3
1 10
2 7
1 -3
输出 #1
person1:20
person2:10
person1:-6
输入 #2
2
2 0
1 0
输出 #2
person2:3
person1:0
说明
MyClass 里两个成员函数可以同时写在类中,未调用就不会创建,因此整份代码能编译。一旦调用,才会检查 obj 是否真有对应接口。Person1 与 Person2 是普通类,它们的成员函数一开始就会创建。
信息
- ID
- 1175
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者