一、实验目的
l 1、掌握类的概念、类的定义格式、类与结构的关系、类的成员属性和类的封装性。
l 2、掌握类对象的定义。
l 3、理解类的成员的访问控制的含义,公有、私有和保护成员的区别。
l 4、掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。能够根据给定的要求定义类并实现类的成员函数。
二、准备内容
1、实验课前需预习实验内容,并做好实验设计。
2、复习视频及课上所讲授的C++中类与对象的C++基本知识。
三、实验内容
设计并完成项目六:慕课网站上第六周的编程作业。
四、实验步骤
(一)编程代码
1. 设计Person类
#include <iostream> //头文件
using namespace std; //使用名字空间
class Person //创建一个类
{
private: //私有成员
string name; //声明一个字符串类型的变量
int age; //声明一个整形变量
char sex; //声明一个字符型的变量
public: //共有成员
void Register(string personName,int personAge,char personSex) //创建有三个参数的函数
{
name =personName; //形参的赋值
age = personAge;
sex = personSex;
}
void ShowMe() //声明一个没有参数的函数
{
cout<<name<<" "<<age<<" "<<sex<<endl;//输出
}
};
int main() //主函数
{
Person person1; //声明一个类的对象
Person person2;
string cinName; //声明一个字符串类型的变量
int cinAge; //声明一个整形变量
char cinSex; //声明一个字符型的变量
cin>>cinName>>cinAge>>cinSex; //输入
person1.Register(cinName, cinAge, cinSex);//调用调用类中的Register函数并初始化
person1.ShowMe(); //调用类中的ShowMe函数
person2.Register("Zhang3",19, 'm');//调用调用类中的Register函数并初始化
person2.ShowMe(); //调用类中的ShowMe函数
return 0; //返回
}
2. 设计Dog类
#include <iostream> //头文件
using namespace std; //使用名字空间
class Dog //创建一个类
{
private: //私有成员
string name; //声明一个字符串类型的变量
int age; //声明一个整形变量
char sex; //声明一个字符型的变量
double weight; //声明一个双精度类型的变量
public: //共有成员
void setdata(string dogName,int dogAge,char dogSex,double dogWeight)//创建一个函数
{
name = dogName; //形参的赋值
age = dogAge;
sex = dogSex;
weight = dogWeight;
}
string GetName() //创建一个没有参数的函数
{
return name; //返回值给name
}
int GetAge() //创建一个没有参数的函数
{
return age; //返回值给age
}
char GetSex() //创建一个没有参数的函数
{
return sex; //返回值给sex
}
double GetWeight() //创建一个没有参数的函数
{
return weight; //返回值给weight
}
};
int main() //主函数
{
Dog dog; //声明一个类的对象
string cinName; //声明一个字符串类型的变量
int cinAge; //声明一个整形变量
char cinSex; //声明一个字符型的变量
double cinWeight; //声明一个双精度类型的变量
cin>>cinName>>cinAge>>cinSex>>cinWeight;//输入
dog.setdata(cinName, cinAge, cinSex, cinWeight);//调用dog类中的setdata函数并初始化
cout<<"It is my dog."<<endl; //输出
cout<<"Its name is "<<dog.GetName()<<"."<<endl;
cout<<"It is "<<dog.GetAge()<<" years old."<<endl;
if(dog.GetSex()=='m'){ //if语句判断性别
cout<<"It is male."<<endl;
}else{//否则
cout<<"It is female."<<endl;
}
cout<<"It is "<<dog.GetWeight()<<" kg."<<endl;
return 0;
}
6.2
1.定义一个带重载构造函数的日期类
#include<iostream>
using namespace std;
class date{ //定义一个date类
int year,month,day; //私有成员
public: //公有成员函数
date(){
year=1900,month=1,day=1;
}
date(int y,int m,int d){
year=y,month=m,day=d;
}
void init(int y,int m,int d){
year=y,month=m,day=d;
}
void show(){
cout<<year<<"-"<<month<<"-"<<day<<endl;
}
};
int main(){
date d1,d2(2100,12,12); //定义两个date类的函数
d1.show();d2.show(); //调用show函数
int y,m,d;
cin>>y>>m>>d;
d1.init(y,m,d);d1.show(); //调用init和show函数
return 0;
}
第三题:设计带构造函数的Dog类
#include<iostream>
#include<cstring>
using namespace std;
class Dog { //定义一个dog类
char name[20];int age;char sex;double wight;//私有成员变量
public: //公有成员函数
Dog() {
strcpy(name, "xxx"), age = 0, sex = 'm',wight=2.4;//把xxx拷贝到name上
}
~Dog() {
cout << "Now destroying the instance of Dog\n";
}
void Register(char n[],int a,char s,double w) {
strcpy(name, n), age = a;sex = s;wight = w;
}
void speak() {
cout << "Arf!Arf!\n";
}
void show() {
cout << name << "\n" << age << "\n" << sex<< endl<<wight<<endl;
}
};
int main() {
Dog *p1 = new Dog; //定义一个新的dog类
char name[20];int age;char s;double wight;
cin >> name >> age >> s>>wight; //输入变量
p1->Register(name, age, s,wight); // Register函数调用
p1->show(); //show函数调用
p1->speak(); //speak函数调用
return 0;
}
第四题:设计并测试一个椭圆类
#include<iostream>
#include<cstring>
using namespace std;
class Ellipse { //定义一个Ellipse类型
double x, y, l, r; //定义双精度变量
public:
Ellipse() {
x = y = l = r = 0; //赋值变量
}
~Ellipse() {
cout << "Now destroying the instance of Ellipse\n";
}
void Register(double x,double y,double l,double r) {
this->x = x; //this指针对私有成员变量赋值
this->y = y;
this->l = l;
this->r = r;
}
double area() {
return l * r*3.14;
}
};
int main() { //主函数
Ellipse *p1 = new Ellipse; //定义一个新的Ellipse类p1
double x, y, l, r;
cin >> x>>y>>l>>r;
p1->Register(x, y, l, r); //函数调用
cout << p1->area();
return 0;
}
(二)运行结果
6.1
第一题:
第二题:
6.2
第一题:
第三题:
第四题:
五、实验结论
经过第六周的学习我学到了:类定义的格式:class<类名>
private://私有成员
<数据成员说明语句>;
<函数成员说明语句>;
public://公有成员
<数据成员说明语句>;
<函数成员说明语句>;
protected://保护成员
<数据成员说明语句>;
<函数成员说明语句>;
还有在类体外定义函数成员的一般格式如下:
<类型><类名>::<函数名>(<参数表>){
<函数体>
}
以及公有成员:外界能够直接访问,起着接口作用;私有成员:外界不能直接访问,使得成员被隐藏起来;成员函数可以在类中定义,也可以在类外定义;公有成员:外界能够直接访问该成员,通过运算符。私有成员只能通过类中的公有函数对数据进行修改。这便是这周学到的知识。