C++面向对象程序设计50道编程题(第01题)

C++面向对象程序设计50道编程题(第01题)

摘要:C++程序设计实习是为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析问题和解决问题的能力,提高学生运用所学知识解决实际问题的能力。
  本专辑为编程入门者、高校计算机软件专业学习或复习提供C++程序设计题库。
  读者请先独立思考哦,再与参考程序进行比对检查。

一、问题描述

在这里插入图片描述

二、考察内容

基本面向对象概念,如何创建类、对象,对公有数据成员和公有成员函数的理解,以及简单的数学运算。

三、难度等级

难度等级:★★☆☆☆

四、参考程序

#include<iostream.h>
class Fract{
	int num,den;
public:
	Fract(int a=0,int b=1){num=a;den=b;}
	int ged(int,int);
	Fract add(Fract);
	void show(){cout<<num<<'/'<<den<<endl;}
};
int Fract::ged(int m,int n) {
	int k;
	if(m>n)k=n;
	else k=m;
	for(;k>0;k--)
		if(m%k==0&&n%k==0)
			break;
			return k;
}
Fract Fract::add(Fract f) {
	Fract ff;
	int v;
	v=ged(den,f.den);
	v=den*f.den/v;
	num=v/den*num;
	f.num=v/f.den*f.num;
	ff.num=num+f.num;
	ff.den=v;
	v=ged(ff.num,ff.den);
	ff.num/=v;
	ff.den/=v;
	return ff;
}
void main(){
	Fract f1(1,5),f2(7,20),f3; //注15
	f3=f1.add(f2);
	f3.show();
}

五、心得感受

可以在评论处写下思考和编程此题的感受

### 关于C++面向对象程序设计第5编程练习 在C++面向对象程序设计的学习过程中,通常会涉及类的设计、继承、多态以及封装等内容。虽然未提供具体的目描述,但可以根据常见的OOP练习模式推测可能的内容并构建解决方案。 假设此练习的目标是创建一个简单的银行账户管理系统,其中包含基本的存款和取款功能,并通过派生类实现不同类型的账户(如普通账户和高级账户)。以下是基于这一场景的代码示例及其解析: #### 示例代码 ```cpp #include <iostream> #include <string> // 基础类 Account 定义通用属性和方法 class Account { protected: std::string accountHolder; double balance; public: Account(const std::string& holder, double initialBalance) : accountHolder(holder), balance(initialBalance) {} virtual ~Account() {} // 虚析构函数确保资源释放 void deposit(double amount) { if (amount > 0) { balance += amount; std::cout << "Deposited: $" << amount << ". New Balance: $" << balance << "\n"; } else { std::cerr << "Invalid deposit amount.\n"; } } virtual bool withdraw(double amount) = 0; // 纯虚函数强制子类实现具体逻辑 void displayInfo() const { std::cout << "Account Holder: " << accountHolder << ", Balance: $" << balance << "\n"; } }; // 派生类 RegularAccount 实现基础账户行为 class RegularAccount : public Account { private: static constexpr double MIN_BALANCE = 100.0; public: RegularAccount(const std::string& holder, double initialBalance) : Account(holder, initialBalance) {} bool withdraw(double amount) override { if (balance - amount >= MIN_BALANCE && amount > 0) { balance -= amount; std::cout << "Withdrew: $" << amount << ". Remaining Balance: $" << balance << "\n"; return true; } else { std::cerr << "Insufficient funds or below minimum balance requirement.\n"; return false; } } }; // 派生类 PremiumAccount 提供额外特权 class PremiumAccount : public Account { private: static constexpr double WITHDRAW_FEE_RATE = 0.02; public: PremiumAccount(const std::string& holder, double initialBalance) : Account(holder, initialBalance) {} bool withdraw(double amount) override { if (amount > 0) { double fee = amount * WITHDRAW_FEE_RATE; if (balance >= amount + fee) { balance -= (amount + fee); std::cout << "Withdrew: $" << amount << " with a fee of $" << fee << ". Remaining Balance: $" << balance << "\n"; return true; } else { std::cerr << "Insufficient funds after applying withdrawal fees.\n"; return false; } } else { std::cerr << "Invalid withdrawal amount.\n"; return false; } } }; ``` #### 代码解析 上述代码展示了如何利用C++中的继承机制来定义不同的账户类型。基类`Account`提供了共同的功能接口,而派生类则实现了特定的行为差异[^1]。 - **抽象基类 `Account`:** - 使用纯虚函数`withdraw`使该类成为不可实例化的抽象类。 - 包含受保护成员变量以便被子类访问。 - **RegularAccount 类:** - 继承自`Account`,重写`withdraw`方法以满足最低余额约束条件。 - **PremiumAccount 类:** - 同样继承自`Account`,但在提款时附加手续费计算逻辑。 这种结构体现了良好的软件工程实践——单一职责原则与开闭原则的应用。 ---
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华师数据学院·王嘉宁

$感谢支持$

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值