C++程序设计基础7:类与对象

290 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

前言

本文为笔者大一《面向对象程序设计》课程章节实验报告,现将题目整理并分享,希望能够帮助正在学习C++的小伙伴!本文将学习到的编程技能包括:类的定义、类的成员的访问权限类型、类的函数、类的实例化等。

知识提纲

类与对象

  • 定义:类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。
  • 成员变量:public、protected、private
  • 函数:构造函数、析构函数、成员函数、友元函数

注:类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。

  • 实例化对象

一、年月日与天数换算

  • 题目: 定义一个Score类,其中包括私有数据成员和公有成员函数,即
mNum          学号
mMath           高等数学成绩
mEnglish           英语成绩
mProgramming    程序设计成绩
Inscore()        输入学号和各科成绩,并且计算平均成绩
Showscore()   输出学号和各科成绩
  • 使用Score类,输入某班n(事先不能确定)个学生的学号和各科成绩,然后求各个学生的平均成绩,并列表输出学生的学号、各科成绩和平均成绩。

  • 说明:由于事先不知道学生的人数,所以在程序中须使用动态对象数组来描述每个学生的数据和对学生的数据进行的操作。

  • 代码

#include <iostream>
using namespace std;

class Score
{
public:
	void Inscore();
	void Showscore();
	int GetNum();
private:
	int mNum;
	double mEnglish;
	double mMath;
	double mProgramming;
	double mAverage;
};

int Score::GetNum()
{
	return mNum;
}

void Score::Inscore()
{
	cin >> mNum >> mEnglish >> mMath >> mProgramming;
	mAverage = (mEnglish + mMath + mProgramming) / 3.0;
}

void Score::Showscore()
{
	cout << mNum << '\t' << mEnglish << '\t' << mMath << '\t' << mProgramming << '\t' << mAverage << endl;
}

int main()
{
	Score p[10000];
	int n=0;
	cout << "请输入学生信息:(输入0 0 0 0结束输入!)\n学号  英语成绩  数学成绩  程序成绩\n";
	for (int i = 0; ; ++i)
	{
		p[i].Inscore();
		if (p[i].GetNum() == 0)
		{
			n = i;
			break;
		}
	}
	cout << "学生成绩如下:\n";
	cout << "学号" << '\t'<<'\t' << "英语" << '\t' << "数学" << '\t' << "程序" << '\t' << "平均" << endl;
	for (int i = 0; i < n; ++i)
	{
		p[i].Showscore();
	}
}

  • 结果 在这里插入图片描述

二、年月日与天数换算

  • 题目: 建立一个复数类Complex,其私有数据成员mX和mY表示复数的实部和虚部,构造函数Complex用于对复数的实部和虚部初始化,友员函数Add,Sub,Mul和Div分别用于进行复数的加、减、乘和除法运算,函数Show用于显示运算结果。在主函数中,实例化两个复数,并输入一个运算符,按运算符选择相应的友员函数进行复数运算,然后输出运算结果。
  • 说明: 假设有两个复数a+bi和c+di,则复数的加、减、乘和除法运算规定如下
(a+bi)+(c-K/i)=(a+c)+(b+d)i
(a+bi)-(c+di)=(a-c)+(b-d)i
(a+bi)*(c+di)=(ac-bd)+(bc+ad)i
(a+bi)/(c+di)=(ac+bd)/(c2+d2)+(bc-ad)/ (c2+d2)i
  • 代码
#include <iostream>
using namespace std;

class Complex
{
public:
	Complex(double x=0.0,double y=0.0)
	{
		mX = x;
		mY = y;
	//	cout << "初始化成功" << endl;  //test
	}
	friend Complex Add(Complex &a,Complex &b);
	friend Complex Sub(Complex &a, Complex &b);
	friend Complex Mul(Complex &a, Complex &b);
	friend Complex Div(Complex &a, Complex &b);
	void Show();
private:
	double mX, mY;
};

void Complex::Show()
{
	if (mY == 0) cout << mX;
	else if (mY < 0) cout << mX << mY << 'i';
	else cout << mX << '+' << mY << 'i';
}

Complex Add(Complex &a, Complex &b)  //相加返回一个复数
{
	Complex c;
	c.mX = a.mX + b.mX;
	c.mY = a.mY + b.mY;
	return c;
}

Complex Sub(Complex &a, Complex &b)  //相减返回一个复数
{
	Complex c;
	c.mX = a.mX - b.mX;
	c.mY = a.mY - b.mY;
	return c;
}

Complex Mul(Complex &a, Complex &b)  //相乘返回一个复数
{
	Complex c;
	c.mX = a.mX * b.mX-a.mY*b.mY;
	c.mY = a.mX*b.mY + a.mY*b.mX;
	return c;
}

Complex Div(Complex &a, Complex &b)  //相乘返回一个复数
{
	Complex c;
	c.mX = (1 / (b.mX*b.mX + b.mY*b.mY))*(a.mX*b.mX + a.mY*b.mY);
	c.mY = (1 / (b.mX*b.mX + b.mY*b.mY))*(-a.mX*b.mY+a.mY*b.mX);
	return c;
}

int main()
{
	Complex A(5.0, 6.0), B(3.0,-2.0);
	Complex C;
	char op;
	cout << "复数1: ";
	A.Show();
	cout << endl;
	cout << "复数2: ";
	B.Show();
	cout << endl;
	cout << "请输入要执行的运算:+-*/" << endl;
	while (cin >> op)
	{
		switch (op)
		{
		case '+':
		{
			C = Add(A, B);
			cout << "("; A.Show(); cout << ")+("; B.Show(); cout << ")=";
			C.Show();
			cout << endl;
		}break;
		case '-':
		{
			C = Sub(A, B);
			cout << "("; A.Show(); cout << ")-("; B.Show(); cout << ")=";
			C.Show();
			cout << endl;
		}break;
		case '*':
		{
			C = Mul(A, B);
			cout << "("; A.Show(); cout << ")*("; B.Show(); cout << ")=";
			C.Show();
			cout << endl;
		}break;
		case '/':
		{
			C = Div(A, B);
			cout << "("; A.Show(); cout << ")/("; B.Show(); cout << ")=";
			C.Show();
			cout << endl;
		}break;
		}
	}
}

  • 结果 在这里插入图片描述