class Student < Person

本文通过定义Person和Student类并实现talk方法,展示了在Ruby中如何使用继承及方法重写来定制不同子类的行为。同时介绍了如何设置默认属性值及如何使用attr_writer来提供setter方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# encoding: utf-8
#E4.4-1.rb ,接着上一节的代码,添加如下:
class Person
def initialize( name, age=18 )
@name = name
@age = age
@motherland = "China"
end #初始化方法结束
def talk
puts "my name is "+@name+", age is "+@age.to_s
if @motherland == "China"
puts "I am a Chinese."
else
puts "I am a foreigner."
end
end # talk方法结束
attr_writer :motherland
end # Person类结束

class Student < Person
def talk
puts "I am a student. my name is "+@name+", age is "+@age.to_s
end # talk方法结束
end # Student类结束

p3=Student.new("kaichuan",25); p3.talk
p4=Student.new("Ben"); p4.talk

=begin
I am a student. my name is kaichuan, age is 25
I am a student. my name is Ben, age is 18
请按任意键继续. . .
=end

检查并修改以下代码,使其完整并运行成功。#include<iostream> #include<cstring> using namespace std; class Person{ public: Person(char* a, int b){ pname=new char[strlen(a) + 1]; strcpy(pname,a); age=b; } Person(){ pname=new char[20]; } ~Person(){ delete []pname; } Person& operator++(){ age++; return *this; } Person operator++(int){ Person tmp=this; age++; return tmp; } void out3(){ age++; } char out(){ return pname; } int out1(){ return age; } virtual void Disp(){ cout<<pname<<","<<age<<endl; } private: char pname; int age; }; class Teacher:virtual public Person{ public: Teacher(char a, int b, char *c): Person(a, b){ strcpy(title,c); } Teacher(){ } Teacher& operator++(){ Person::out3(); return *this; } Teacher operator++(int){ Teacher tmp=this; Person::out3(); return tmp; } char out(){ return title; } void Disp(){ cout<<Person::out()<<","<<Person::out1()<<","<<title<<endl; } private: char title; }; class Student:virtual public Person{ public: Student(char a,int b,int c):Person(a,b),score(c){ } Student(){ } Student& operator++(){ Person::out3(); return this; } Student operator++(int){ Student tmp=this; Person::out3(); return tmp; } int out(){ return score; } void Disp(){ cout<<Person::out()<<","<<Person::out1()<<","<<score<<endl; } private: int score; }; class StuTeacher:public Student,public Teacher{ public: StuTeacher(char a,int b,int c,char d):Person(a,b),Student(a,b,c),Teacher(a,b,"jxjs"){ strcpy(danwei,d); } StuTeacher(){ } StuTeacher& operator++(){ Person::out3(); return *this; } StuTeacher operator++(int){ StuTeacher tmp=*this; Person::out3(); return tmp; } void Disp(){ cout<<Person::out()<<","<<Person::out1()<<","<<Student::out()<<","<<danwei<<endl; } private: char danwei[20]; }; void fn(Person& tttt){ tttt.Disp(); } int main() { char name[20],title[20],company[20]; int age,score; cin>>name>>age>>score; Student s(name,age,score); (s++).Disp(); s.Disp(); cin>>name>>age>>title; Teacher t(name,age,title); t.Disp(); (++(++t)).Disp(); cin>>name>>age>>score>>company; StuTeacher st1(name,age,score,company); StuTeacher st2=st1,st3,st4; st4=st3=st2; (st3++).Disp(); (++st3).Disp(); fn(s); fn(t); fn(st3); return 0; }
06-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值