面向对象方法的学习与使用

类的初使用

题目

#include<iostream>
using namespace std;
const float pi=3.14159;
class Circle//圆类 
{
	public:
		Circle(float r);//构造函数,用于初始化类中数据成员 
		float S_circle();//圆面积
		float C_circle();//圆周长 
	private:
		float radius;//半径 
};
Circle::Circle(float r)
{
	radius=r;
}
float Circle::C_circle()
{
	return 2*pi*radius;//可直接使用同类中的数据成员
}
float Circle::S_circle()
{
	return radius*radius*pi;
}
int main()
{
	float R;
	cin>>R;
	Circle one(R),two(R+3);//
	cout<<"过道造价为:"<<20*(two.S_circle()-one.S_circle())<<endl;
	cout<<"栅栏造价为:"<<35*two.C_circle(); 
	return 0;
}

运算符重载

程序示例

#include<iostream>
using namespace std;
class Time{
	public:
		Time(){//注意,这个构造函数不能少
			hour=min=0;
		}
		Time(int h,int m){//需要在定义该类对象时初始化,即类名 对象名(初始值列表),则该构造函数不能少 
			hour=h,min=m;
		}
		void show(){//显示时间 
			cout<<hour<<"时"<<min<<"分"<<endl; 
		}
		Time operator+(Time &t);//重载 +  
	private:
		int hour,min;
}; 
Time Time::operator+(Time &t)
{
	Time res;//没有Time(),此处会报错
	res.hour=hour+t.hour;
	res.min=min+t.min;
	res.hour+=res.min/60;
	res.min=res.min%60;
	return res;
}
int main()
{
	Time T1(1,30),T2(2,45);
	Time T;
	T=T1+T2;
	T.show();
	return 0;
}

做了一些修改后

#include<iostream>
using namespace std;
class Time{
	public:
		//修改处 
		void Set(int h,int m){//用该函数来设置时间 
			hour=h,min=m;
		} 
		//到此为止 
		void show(){//显示时间 
			cout<<hour<<"时"<<min<<"分"<<endl; 
		}
		Time operator+(Time &t);//重载 +  
	private:
		int hour,min;
}; 
Time Time::operator+(Time &t)
{
	Time res;
	res.hour=hour+t.hour;
	res.min=min+t.min;
	res.hour+=res.min/60;
	res.min=res.min%60;
	return res;
}
int main()
{
	//修改处 
	Time T1,T2;
	T1.Set(1,30);
	T2.Set(2,45);
	//到此为止 
	Time T;
	T=T1+T2;
	T.show();
	return 0;
}

重载*

#include<iostream>
using namespace std;
class Time{
	public:
		Time()
		{
			hour=min=0;
		}
		Time(int h,int m){
			hour=h,min=m;
		}
		void Set(int h,int m){//用该函数来设置时间 
			hour=h,min=m;
		} 
		void show(){//显示时间 
			cout<<hour<<"时"<<min<<"分"<<endl; 
		}
		friend Time operator*(int n,Time &t);//重载*   
		friend Time operator*(Time &t,int n);//重载* 
	private:
		int hour,min;
}; 
Time operator*(int n,Time &t)
{
	Time res;
	res.hour=n*(t.hour);
	res.min=n*(t.min);
	res.hour+=res.min/60;
	res.min=res.min%60;
	return res;
}
Time operator*(Time &t,int n)
{
	Time res;
	res.hour=n*(t.hour);
	res.min=n*(t.min);
	res.hour+=res.min/60;
	res.min=res.min%60;
	return res;
}
int main()
{
	Time T1(1,30),T2,T3;
	T2=3*T1;
	T3=T1*2;
	T2.show();
	T3.show();
	return 0;
}

题目

声明一个教师(Teacher)类和一个学生(Student)类,用多重继承的方式声明一个研究生(Graduate)派生类。教师类中包括数据成员name(姓名),age(年龄),title(职称)。学生类中包括数据成员name(姓名),age(年龄),score(成绩),输出这些数据。

无输入
输出样例

name:Wang-li
age:24
sex:f
score:89.5
title:assistant
wages:1234.5

#include<iostream>
#include<cstring>//不加也行
using namespace std;
/* 请在这里填写答案 */
class People {
private:
	string name;
	char sex;
	int age;
public:
	People( string n, char Sex,int a) { name=n,sex=Sex, age = a; }
	void disp1() 
	{ 
		cout << "name:"<<name << endl;
		cout << "age:" << age << endl;
		cout << "sex:" << sex << endl;
	}
};
class Student:virtual public People 
{
private: 
	double score;
public:
	Student(string n, char Sex, int a, double sc) :People(n, Sex, a) { score = sc; }
	void disp2() { cout << "score:"<<score<<endl; }
};
class Teacher :virtual public People {
private:
	 string title;
public:
	Teacher(string n, char Sex, int a,  string T ):People(n, Sex, a) { title=T; }
	void disp3() { cout << "title:" << title << endl; }
};
class Graduate :public Student, public Teacher {
private:
	double wages;
public:
	Graduate(string n, int a , char Sex,  string T, double sc,double w) :People(n, Sex, a),Student(n, Sex, a,sc),Teacher(n, Sex, a,T) { wages = w; }
	void disp4() { cout << "wages:" << wages << endl; }
	void show() {
		disp1();
		disp2();
		disp3();
		disp4();
	}
};
int main() {
	Graduate grad1("Wang-li", 24, 'f', "assistant", 89.5, 1234.5);
	grad1.show();
	return 0;
}

注意

1.在使用string类型来接收语句时,若有空格,可以用getline(cin,str)来接收,在getline之前记得用一个char c=cin.get()吸收一个多余的字符
2.类内声明常成员函数,在类外定义时记得在(函数形参列表)后跟上const然后再{}
3.类内仍有一个类时,需要在构造函数的初始化列表中初始化类内对象 类名(总参数列表):类内对象名(传参){}

posted @ 2020-03-29 09:55  枭魈  阅读(267)  评论(0编辑  收藏  举报