根据所定义的基类,定义派生类,请填空完成程序的功能 #include <iostream> #include <string> using namespace std; class Student //声明基类 {public: //公用部分 Student(int n,string nam) //基类构造函数 {num=n; name=nam; } void display() //输出基类数据成员 {cout<<"num:"<<num<<endl<<"name:"<<name<<endl;} protected: //保护部分 int num; string name; }; class Student1: public Student //用public继承方式声明派生类student {public: //派生类构造函数 {age=a; //在此处只对派生类新增的数据成员初始化 addr=ad; } void show( ) {cout<<"This student is:"<<endl; display(); //输出num和name cout<<"age: "<<age<<endl; cout<<"address: "<<addr<<endl<<endl; } void show_monitor() //输出子对象的数据成员 {cout<<endl<<"Class monitor is:"<<endl; monitor.display(); //调用基类成员函数 } private: //派生类的私有数据 Student monitor; //定义子对象(班长) int age; string addr; }; int main( ) {Student1 stud1(10010,"Wang-li",10001,"Li-sun",19,"115 Beijing Road,Shanghai"); stud1.show( ); //输出第一个学生的数据 stud1.show_monitor(); //输出子对象的数据 return 0; }
时间: 2024-02-10 20:34:28 浏览: 283
这段程序的作用是定义了一个基类 Student,包含学生的学号和姓名,然后定义一个派生类 Student1,继承自基类 Student,增加了学生的年龄和地址,并且在派生类中定义了一个子对象 monitor,即班长,用于保存班长的学号和姓名信息。程序的主函数中创建一个 Student1 对象 stud1,包含学生和班长的信息,然后分别调用成员函数 show 和 show_monitor 输出学生和班长的信息。
相关问题
解释下面这段代码:#include<iostream> #include<string> using namespace std; // 基类 class Buyer{ protected: string name; // 姓名 string id; // 购书人编号 string address; // 地址 float pay; // 购书金额 public: Buyer(string n,string i,string a,float p){ name = n; id = i; address = a; pay = p; } virtual void setPay(){} // 定义虚函数 virtual void display(){} // 定义虚函数 string getName(){ return name; } string getAddress(){ return address; } float getPay(){ return pay; } string getId(){ return id; } }; // 派生类1:会员 class Member:public Buyer{ private: int level; // 会员级别 public: Member(string n,string i,string a,float p,int l):Buyer(n,i,a,p){ level = l; } void setPay(){ // 重写虚函数 switch(level){ case 1: pay = pay * 0.95; break; case 2: pay = pay * 0.9; break; case 3: pay = pay * 0.85; break; case 4: pay = pay * 0.8; break; case 5: pay = pay * 0.7; break; } } void display(){ // 重写虚函数 cout<<"姓名:"<<name<<endl; cout<<"编号:"<<id<<endl; cout<<"地址:"<<address<<endl; cout<<"应付金额:"<<pay<<endl; cout<<"会员级别:"<<level<<endl; } };
这段代码是一个简单的面向对象程序,定义了一个基类 Buyer 和一个派生类 Member,其中 Member 继承了 Buyer 的属性和方法,并且重写了基类中的虚函数 setPay 和 display。
在该程序中,Buyer 是一个基类,其中定义了一些成员变量和方法,包括姓名、购书人编号、地址、购书金额等,还定义了两个虚函数 setPay 和 display。而 Member 是一个派生类,继承了基类 Buyer 的属性和方法,并且增加了一个会员级别属性,同时重写了基类中的虚函数 setPay 和 display。
在 Member 类中,setPay 函数根据会员级别来计算购书金额,并且重写了基类中的 setPay 函数;而 display 函数用于输出购书人的信息,并且重写了基类中的 display 函数。这里需要注意的是,setPay 和 display 函数都是虚函数,因此可以通过基类指针或引用来调用派生类中的函数。
整个程序中使用了命名空间 std,包含了头文件 iostream 和 string。同时,为了方便访问类中的成员变量和方法,使用了关键字 using namespace std。
设计实验,验证基类成员在派生类中的访问属性(能否编译)。用c++编程可运行的程序
好的,以下是代码实现:
```cpp
#include<iostream>
#include<string>
using namespace std;
class Animal {
private:
string name;
public:
string getName() { return name; }
};
class Cat : public Animal {
public:
void meow() { cout << getName() << " is meowing" << endl; }
};
int main() {
Cat c;
c.meow();
return 0;
}
```
这段代码实现了一个基类 Animal,其中包含一个私有成员变量 name 和一个公有成员函数 getName()。接下来定义了一个派生类 Cat,它继承自 Animal,包含一个公有成员函数 meow(),用于输出猫叫的声音。在 meow() 方法中,我们调用了基类的公有成员函数 getName(),来获取猫的名字。
在主函数中,我们创建了一个 Cat 对象 c,并调用它的 meow() 方法,输出了猫叫的声音。由于基类 Animal 中的私有成员变量 name 在派生类 Cat 中无法直接访问,必须通过基类提供的公有成员函数 getName() 进行访问。如果派生类试图直接访问基类的私有成员变量,编译器会报错。因此,这个程序验证了基类成员在派生类中的访问属性。
阅读全文
相关推荐














