谈谈国内的C++语言教学

C++语言教学目前普遍存在的一个问题是重语言轻思想。

最常见的一个例子是在C++运算符重载那一章,有些考试题竟然拿+号运算符重载一个自定义的减法运算。

下面是个人认为比较好的一个例子,至少没有破坏原来的含义。

原文地址:http://en.cppreference.com/w/cpp/language/operators

Example

#include <iostream>
 
class Fraction
{
    int gcd(int a, int b) {return b==0 ? a : gcd(b,a%b); }
    int n, d;
 public:
    Fraction(int n, int d = 1) : n(n/gcd(n,d)), d(d/gcd(n,d)) {}
    int num() const { return n; }
    int den() const { return d; }
    Fraction& operator*=(const Fraction& rhs) {
        int new_n = n*rhs.n / gcd(n*rhs.n, d*rhs.d);
        d = d*rhs.d / gcd(n*rhs.n, d*rhs.d);
        n = new_n;
        return *this;
    }
};
std::ostream& operator<<(std::ostream& out, const Fraction& f){
   return out << f.num() << '/' << f.den() ;
}
bool operator==(const Fraction& lhs, const Fraction& rhs) {
    return lhs.num() == rhs.num() && lhs.den() == rhs.den();
}
bool operator!=(const Fraction& lhs, const Fraction& rhs) {
    return !(lhs == rhs);
}
Fraction operator*(Fraction lhs, const Fraction& rhs)
{
    return lhs *= rhs;
}
 
int main()
{
   Fraction f1(3,8), f2(1,2), f3(10,2);
   std::cout << f1 << '*' << f2 << '=' << f1*f2 << '\n'
             << f2 << '*' << f3 << '=' << f2*f3 << '\n'
             << 2  << '*' << f1 << '=' << 2 *f1 << '\n';
}

Output:

3/8*1/2=3/16
1/2*5/1=5/2
2*3/8=3/4


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值