文章目录
-
-
- 1、求最大值
- 2、求圆面积
- 3、编写重载函数来打印字符串
- 4、设计带构造函数的Dog类
- 5、定义一个带重载构造函数的日期类
- 6、 C++第三章——指针,动态生成Person类的对象
- 7、编写一个小小的计算器,能够计算两个浮点数的加、减、乘、除。
- 8、设计一个多功能的MyTime类
- 9、面向对象之存折类
- 10.User类
- 11.定义一个图书类Book 对象数组应用
- 12.定义一个交通工具的类
- 13、统计学生总成绩和平均成绩(静态成员变量)
- 14、按要求构建stock类(this应用)
- 15、友元函数的应用
- 16、类的组合应用
- 17、派生与继承之联想电脑
- 18、矩形类继承实现
- 19、第四章-派生类及继承实现之多重继承
- 20、第四章-派生类及继承实现之虚函数
- 21、实现一维数组的函数重载:
- 22、友元运算符重载
- 23、虚基类的实现
- 24、纯虚函数的应用
- 25、函数模块使用
- 26、综合题
- 27、类模板实现
- 28、函数模板
- 29、异常处理实现
- 30、
-
1、求最大值
题目描述:输入两个整数,比较大小并输出“max=”,之后输出较大的值。
代码实现:
#include <iostream>
using namespace std;
int main()
{
int num1, num2;
cin>>num1>>num2;
num1 > num2 ? cout<<num1 : cout<<num2;
return 0;
}
执行结果:
2、求圆面积
题目描述:定义一个circle圆类,有浮点型的半径属性和计算面积行为。PI值定为常量3.14。从键盘接收一个半径值并创建相应的circle对象,输出这个圆的面积。
代码实现:
#include <iostream>
using namespace std;
const float PI = 3.14;
class circle{
public:
circle(float a)
{
r = a;
}
void area()
{
cout<<PI*r*r<<endl;
}
private:
float r;
};
int main()
{
float r;
cin>>r;
circle crl(r);
crl.area();
return 0;
}
执行结果:
3、编写重载函数来打印字符串
题目描述:编写函数 print_spaced 来打印字符串,要求打印出的字符串每个字母之间都有一个空格。要求编写两个同名函数,一个支持字符数组输入,另一个支持string类型输入。然后编写main函数测试这两个函数,第一个使用字符数组输入,第二个使用string类型输入。
函数原型为:void print_spaced(char s[]) ; void print_spaced(string s) ;
代码实现:
#include <iostream>
#include <string.h>
using namespace std;
void print_spaced(char s[]);
void print_spaced(string s);
void print_spaced(char s[])
{
int i = 0;
while(s[i] != '\0')
{
cout<<s[i];
if((i != strlen(s)-1))
{
cout<<" ";
}
i++;
}
cout<<endl;
}
void print_spaced(string s)
{
for(int i = 0; i < s.length(); i++)
{
cout<<s[i];
if((i != s.length()-1))
{
cout<<" ";
}
}
}
int main()
{
char s1[101];
string str;
cin>>s1;
print_spaced(s1);
cin>>str;
print_spaced(str);
return 0;
}
运行结果:
4、设计带构造函数的Dog类
题目描述:设计一个Dog类,包含name、age、sex和weight等属性,在有参数的构造函数中对数据成员进行初始化。
公有成员函数有:GetName()、GetAge()、GetSex()和GetWeight()可获取名字、年龄、性别和体重。编写成员函数speak() 显示狗的叫声(Arf!Arf!)。编写主函数,输入狗的名字、年龄、性别和体重;声明Dog对象并用输入的数据通过构造函数初始化对象,通过成员函数获取狗的属性并显示出来。
代码实现:
#include <iostream>
using namespace std;
class Dog{
public:
Dog(string names, int ages, string sexs, float weights)
{
name = names;
age = ages;
sex = sexs;
weight = weights;
}
string GetName();
int GetAge();
string GetSex();
float GetWeight();
void speak();
private:
string name;
int age;
string sex;
float weight;
};
string Dog::GetName()
{
return name;
}
int Dog::GetAge()
{
return age;
}
string Dog::GetSex()
{
return sex;
}
float Dog::GetWeight()
{
return weight;
}
void Dog::speak()
{
cout<<"Arf!Arf!"<<endl;
}
int main()
{
string name;
int age;
float weight;
string sex;
cin>>name>>age>>sex>>weight;
Dog dog(name, age, sex, weight);
cout<<dog.GetName()<<endl;
cout<<dog.GetAge()<<endl;
cout<<dog.GetSex()<<endl;
cout<<dog.GetWeight()<<endl;
dog.speak();
return 0;
}
运行结果:
5、定义一个带重载构造函数的日期类
题目描述:定义一个带重载构造函数的日期类Date,数据成员有年、月、日;成员函数包括:一个带参数的构造函数Date(int,int,int),一个不带参数的构造函数(设置默认值为1900-1-1),一个按“年-月-日”格式显示日期的函数void show(),一个对数据成员赋值的函数void init(int,int,int)。
主函数中对类的测试要求:
- 分别使用两个不同的重载构造函数创建两个日期类对象(必须为d1,d2,d2初始值为2100-12-12);
- 按“年-月-日”格式分别显示两个对象的值;
- 输入数据,用init函数为d1赋值;
2.按“年-月-日”格式显示对象d1的值;
代码实现:
#include <iostream>
using namespace std;
class Date{
public:
Date(int, int, int);
Date();
void show();
void init(int,int,int);
private:
int year;
int mouth;
int day;
};
Date::Date()
{
year = 1900;
mouth = 1;
day = 1;
}
Date::Date(int years, int mouths, int days)
{
year = years;
mouth = mouths;
day = days;
}
void Date::show()
{
cout<<year<<"-"<<mouth<<"-"<<day<<endl;
}
void Date::init(int years, int mouths, int days)
{
year = years;
mouth = mouths;
day = days;
}
int main()
{
int y;
int m;
int d;
Date d1;
Date d2(2100, 12, 12);
d1.show();
d2.show();
cin>>y>>m>>d;
d1.init(y, m, d);
d1.show();
return 0;
}
运行结果:
6、 C++第三章——指针,动态生成Person类的对象
题目描述:编写Person类,数据成员为姓名(20字符长度)、年龄(int)和性别(char)。
编写无参数的构造函数,其中姓名赋值为“XXX”,年龄0,性别m;
编写析构函数,在其中输出字符串“Now destroying the instance of Person”;
编写Register成员函数,为数据成员赋值;
编写showme成员函数,显示姓名、年龄和性别。
编写主函数:
用Person类创建2个指针,p1和 p2;
用new创建两个Person对象,分别将指针赋值给p1,p2;
用showme成员函数显示p1,p2所指对象的值;
再输入一组“姓名、年龄和性别”值,用成员函数Register为p1的成员赋值;
将p1所指对象的值赋值给p2所指对象;
用showme显示p1、p2所指对象的值。
删除动态对象。
代码实现:
#include <iostream>
#include <string.h>
using namespace std;
class Person{
public:
Person();
~Person();
void Register(char names[20], int ages, char sexs);
void showme();
private:
char name[20];
int age;
char sex;
};
Person::Person()
{
strcpy(name, "XXX");
age = 0;
sex = 'm';
}
Person::~Person()
{
cout<<"Now destroying the instance of Person"<<endl;
}
void Person::Register(char names[20], int ages, char sexs)
{
//将字符串names 赋值给name
memcpy(name, names, strlen(names));
age = ages;
sex = sexs;
}
void Person::showme()
{
cout<<name<<" "<<age<<" "<<sex<<endl;
}
int main()
{
char name[20];
int ages;
char sexs;
Person *p1, *p2;
p1 = new Person();
p2 = new Person();
cout<<"person1:";
p1->showme();
cout<<"person2:";
p2->showme();
cin>> name >> ages >> sexs;
p1->Register(name, ages, sexs);
cout<<"person1:";
p1->showme();
*p2 = *p1;
cout<<"person2:";
p2->showme();
delete p1;
delete p2;
return 0;
}
运行结果:
7、编写一个小小的计算器,能够计算两个浮点数的加、减、乘、除。
每行是一个测试用例,每行的内容为:操作数1 运算符 操作数2,操作数为浮点数,运算符为+、-、*、/,操作数和运算符之间有一个空格隔开。
对每个测试用例,输出一行计算结果,保留两位小数的精度。如果除法遇到操作数2为0,输出“Divide by zero."。
代码实现:
#include <iostream>
#include <iomanip>
//需导入iomanip库 才能使用cout<< fixed <<setprecision(2);
using namespace std;
class Calculator{
public:
Calculator(double inum1, char ioper, double inum2)
{
num1 = inum1;
oper = ioper;
num2 = inum2;
}
void calculate()
{
cout<< fixed <<setprecision(2);
switch(oper)
{
case '+' :
cout<< num1 + num2 <<endl;
break;
case '-':
cout<< num1 - num2 <<endl;
break;
case '*':
cout<< num1 * num2 <<endl;
break;
case '/':
if(num2 == 0)
{
cout<< "Divide by zero." <<endl;
break;
}
cout<< num1 / num2 <<endl;
break;
default:
cout<<"你输入有误" <<endl;
}
}
private:
double num1, num2;
char oper;
};
int main()
{
double num1, num2;
char oper;
cin>>num1>>oper>>num2;
Calculator cal(num1, oper, num2);
cal.calculate();
cin>>num1>>oper>>num2;
Calculator cal2(num1, oper, num2);
cal2.calculate();
cin>>num1>>oper>>num2;
Calculator cal3(num1, oper, num2);
cal3.calculate();
cin>>num1>>oper>>num2;
Calculator cal4(num1, oper, num2);
cal4.calculate();
return 0;
}
运行结果:
8、设计一个多功能的MyTime类
题目描述:设计一个多功能的MyTime类,设计多个重载的构造函数,可以设置时间,进行时间的加减运算,按各种可能的格式(24小时制、12小时制)输出时间。
注意:
(1)请考虑设置的时间的合理性(时0-23; 分0-59;秒0-59)。
(2)12小时制中,12:00:00前为AM, 12:00:00及以后为PM
(3)加减运算的加数、减数是一个时间的长度,单位为“时、分、秒”
(4)构造函数:没参数时,设置时间为0时 0分 0秒;有参数时,设置成给定的时、分、秒。
在主函数中
(1)声明两个对象t1,t2,并通过构造函数初始化它们(t2初始化为为8:10:30)
(2)显示按12、14小时制显示t1、t2的时间。
(3)再设置t1的时间,数据由用户输入。
(4)再输入待加减的时间。
(5)t1加输入的时间,并按12小时和24小时制显示。
(6)t2减输入的时间,并按12小时和24小时制显示。
输入格式:
第一行为t1的时间,第二行为待加减的时间
输出格式:
显示按12、14小时制显示t1、t2的初始时间
t1加输入的待加减的时间按12小时和24小时制显示。
t2减输入的待加减的时间按12小时和24小时制显示
输入样例:
11 30 30
5 15 20
输出样例:
00:00:00 AM
00:00:00
08:10:30 AM
08:10:30
04:45:50 PM
16:45:50
02:55:10 AM
02:55:10
代码实现:
#include<iostream>
using namespace std;
class MyTime
{
private:
int hour;
int minute;
int second;
public:
MyTime()
{
hour = 0;
minute = 0;
second = 0;
}
MyTime(int _hour, int _minute, int _second)
{
hour = _hour;
minute = _minute;
second = _second;
}
void SetTime(int _hour, int _minute, int _second)
{
hour = _hour;
minute = _minute;
second = _second;
}
void addTime(int h,int m,int s)
{
hour += h;
minute += m;
second += s;
if(second>=60)
{
second = second -60;
minute = minute + 1;
}
if(minute>=60)
{
minute = minute - 60;
hour = hour + 1;
}
if(hour>=24)
{
hour = hour -24;
}
}
void reduceTime(int _h,int _m,int _s)
{
if(second<_s)
{
second += 60;
minute --;
}
if(minute<_m)
{
minute += 60;
hour --;
}
if(hour<_h)
{
hour = hour + 24;
}
hour -= _h;
minute -= _m;
second -= _s;
}
void print_12()
{
int tempHour;
hour>=12?tempHour=hour-12:tempHour=hour;
if(tempHour<10){
cout<<'0';
}
cout<<tempHour<<':';
if(minute<10){
cout<<'0';
}
cout<<minute<<':';
if(second<10){
cout<<'0';
}
cout<<second;
if(hour>12||((hour==12)&&((minute>0)||(second>0)))){
cout<<" "<<"PM"<<endl;
}else{
cout<<" "<<"AM"<<endl;
}
}
void print_24()
{
if(hour<10){
cout<<'0';
}
cout<<hour<<':';
if(minute<10){
cout<<'0';
}
cout<<minute<<':';
if(second<10){
cout<<'0';
}
cout<<second<<endl;
}
};
int main()
{
MyTime t1;
MyTime t2(8,10,30);
t1.print_12();
t1.print_24();
t2.print_12();
t2.print_24();
int h1,m1,s1,h2,m2,s2;
cin>>h1>>m1>>s1;
t1.SetTime(h1, m1, s1);
cin>>h2>>m2>>s2;
t1.addTime(h2,m2,s2);
t2.