实验题目录:点击打开链接
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)用来打印A和B的私有成员变量。
请分别通过成员函数做友元函数和友元类来实现此功能。
友元类:
#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;
}