类与对象 继承 实验八 期末回顾

实验题目录:点击打开链接

1.第一题

1、定义一个基类person(不定义构造函数)

  姓名、性别、年龄(访问权限设置为私有)

  定义公有的成员函数set_p()

  定义公有的成员函数display_p(),显示person信息

  再由基类派生出学生类(不定义构造函数,采用公有继承的方式)

  增加学号、班级、专业和入学成绩

  定义公有成员函数set_t()

  定义成员函定义公有的成员函数display_s(),显示所有的信息

#include<bits/stdc++.h>
using namespace std;
class  Person
{
  string name,sex;
  int age; 
public:
	int set_p()
	{
		cout<<"请输入姓名、性别、年龄"<<endl;
	    cin>>name>>sex>>age;
	} 
	int display_p()
	{
		cout<<"姓名、性别、年龄"<<endl;
		cout<<name<<" "<<sex<<" "<<age<<endl;
	}
};
 class Student:public Person
 {
 	string id,c,major,g;
public:
	int set_s()
	{    set_p();
		cout<<"请输入学号、班级、专业和入学成绩 "<<endl;
	    cin>>id>>c>>major>>g;
	} 
	int display_s()
	{
		display_p();
		cout<<"学号、班级、专业和入学成绩 "<<endl;
		cout<<id<<" "<<c<<" "<<major<<" "<<g<<endl;
	}
 };
int main()
{
    Student s;
    s.set_s();
    s.display_s();
	return 0;
}

   

2.第二题

定义一个基类有姓名、性别、年龄,再由基类派生出教师类和学生类,教师类增加工号、职称和工资,学生类增加学号、班级、专业和入学成绩,用主函数进行测试。


#include<bits/stdc++.h>
using namespace std;
class  Person
{
  string name,sex;
  int age; 
public:
	int set_p()
	{
		cout<<"请输入姓名、性别、年龄"<<endl;
	    cin>>name>>sex>>age;
	} 
	int display_p()
	{
		cout<<"姓名、性别、年龄"<<endl;
		cout<<name<<" "<<sex<<" "<<age<<endl;
	}
};
 class Student:public Person
 {
 	string id,c,major,g;
public:
	int set_s()
	{    set_p();
		cout<<"请输入学号、班级、专业和入学成绩 "<<endl;
	    cin>>id>>c>>major>>g;
	} 
	int display_s()
	{
		display_p();
		cout<<"学号、班级、专业和入学成绩 "<<endl;
		cout<<id<<" "<<c<<" "<<major<<" "<<g<<endl;
	}
 };
class Techer:public Person
 {
 	string id,wage,job;
public:
	int set_t()
	{
		set_p();
		cout<<"请输入工号、职称和工资 "<<endl;
	    cin>>id>>job>>wage;
	}
	int display_t()
	{
		display_p();
		cout<<"工号、职称和工资 "<<endl;
		cout<<id<<" "<<job<<" "<<wage<<endl;
	}
 };
 
int main()
{
	cout<<"学生"<<endl;
    Student s;
    s.set_s();
    s.display_s();
    cout<<"老师"<<endl;
    Techer t;
    t.set_t();
    t.display_t();
	return 0;
}

三.第三题

分别定义一个类A和类B,各有一个私有整数成员变量,通过构造函数初始化;类A有一个成员函数Show(B &b)用来打印AB的私有成员变量。

请分别通过成员函数做友元函数和友元类来实现此功能。

友元类:

#include<iostream>
using namespace std;
class B;
class A
{
     int a;
public:
     void show(B&x);
     
};
class B
{
   int b;
public: 
	friend class A;
	
};
void A::show(B&x)  //在这里,show函数不能写在类A里面,因为类A不知道类B的私有成员是啥
{
	{
     	a=1;
     	x.b=2;
     	cout<<a<<" "<<x.b<<endl;
	}
}
int main()
{
   A y;
   B x;
   y.show(x);
  return 0;
 }

友元函数

#include<iostream>
using namespace std;
class B;
class A
{
     int a;
public:
     void show(B&x);
     
};
class B
{
   int b;
public: 
	friend void A::show(B&x);
	
};
void A::show(B&x)  //在这里,show函数不能写在类A里面,因为类A不知道类B的私有成员是啥
{
	{
     	a=1;
     	x.b=2;
     	cout<<a<<" "<<x.b<<endl;
	}
}
int main()
{
   A y;
   B x;
   y.show(x);
  return 0;
 }

四.第四题

实现深复制

#include<bits/stdc++.h>
using namespace std;
class student
{ 
	char name[20];
	unsigned id;
	double score;
	public:
		student(char s[20]="\0", unsigned k=0, double t=0)
		{
			strcpy(name,s);
			id=k;
			score=t;
		}
		student(const student &ss)		//复制构造函数  ,实现深复制
		{
			strcpy(name,ss.name);
			id=ss.id;
			score=ss.score;
		}
		void input()
		{
			cout<<"name? ";
			cin>>name;
			cout<<"id? ";
			cin>>id;
			cout<<"score? ";
			cin>>score;
		}
		void output()
		{
			cout<<"name: "<<name<<"\tid: "<<id<<"\tscore: "<<score<<endl;
		}
};
int main()
{ 
	 cout<<"s2:\n";
   student s2("Zhangsan", 120, 85);
   s2.output();
   cout<<"s3:\n";
   student s3(s2);
   s3.output();
   return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值