C++:使用非成员函数(non-member)处理函数的所有参数都需要类型转换

有些函数, 所有参数都需要使用类型转换, 比如乘法, 写一个有理数类Rational, 需要执行乘法操作:

函数满足: Rational = Rational*double; Rational = double*Rational; 则需要使用非成员函数(non-member);

成员函数的发起者必须是类, 因为可能出现double类型在前的情况, 则无法执行乘法, 所以应使用非成员函数;

执行时: 即Rational = Rational*Rational(double); Rational = Rational(double)*Rational, 发生了隐式转换.

代码:

/*
 * test.cpp
 *
 *  Created on: 2014.04.22
 *      Author: Spike
 */

/*eclipse cdt, gcc 4.8.1*/

#include <iostream>  

//有理数
class Rational {
public:
    Rational(double numerator = 0, double denominator = 1) :
        m_n(numerator), m_d(denominator) {}
    double numerator() const {return m_n;};
    double denominator() const {return m_d;};
    double value() {return (m_n/m_d);}
private:
    double m_n;
    double m_d;
};  

const Rational operator* (const Rational& lhs,
        const Rational& rhs) {
    return Rational(lhs.numerator()*rhs.numerator(),
            lhs.denominator()*rhs.denominator());
}  

int main(void) {
    Rational oneFourth(1, 4);
    Rational result;
    result = oneFourth * 3.5;
    result = 3.5 * oneFourth;
    std::cout << "result = " << result.value() << std::endl;  

    return 0;
}

输出:

result = 0.875

作者:csdn博客 Spike_King

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/cplus/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索函数
, const
, double
, 乘法
, rational
成员
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-08-31 00:04:40

C++:使用非成员函数(non-member)处理函数的所有参数都需要类型转换的相关文章

C++普通函数指针与成员函数指针实例解析_C 语言

C++的函数指针(function pointer)是通过指向函数的指针间接调用函数.相信很多人对指向一般函数的函数指针使用的比较多,而对指向类成员函数的函数指针则比较陌生.本文即对C++普通函数指针与成员函数指针进行实例解析. 一.普通函数指针 通常我们所说的函数指针指的是指向一般普通函数的指针.和其他指针一样,函数指针指向某种特定类型,所有被同一指针运用的函数必须具有相同的形参类型和返回类型. int (*pf)(int, int); // 声明函数指针 这里,pf指向的函数类型是int (

C++类的成员函数(在类外定义成员函数、inline成员函数)

类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private(私有的).public (公用的)或protected(受保护的). 在使用类函数时,要注意调用它的权限(它能否被调用)以及它的作用域(函数能使用什么范围中的数据和函数).例如私有的成员函数只能被本类中的其它成员函数所调用,而不能被类外调用.成员函数可以访问本类中任何成员(包括私有的和公用的),可

定义函数声明误区和函数相互调用导致的问题

我们编写程序时一般有个习惯,写函数都爱把函数写到主函数的前面, 一般常用的写法: #include<iostream> using namespace std; void A() { cout<<"函数A\n"; } void B() { cout<<"函数B\n"; } int main() { A(); B(); return 0; } 运行结果: 现在看着很正常是吧?运行结果也对,我们一般定义函数都习惯这样写,以为这样就不用

&amp;#106avascript写作技巧,函数A中调用函数B, 怎样在函数B中写代码中断函数A的运行?

函数|技巧 function funcA(){        funcB();       //other code } 怎么定义函数B,让B在运行的时候不仅能终止B本身,而且能终止函数A的运行?  这是个非常规的问题,我们分两大部分讨论. (1.为什么一定这样做 2.怎么实现) 1. 显然,这种编码方式已经打乱了正规的程序编写原则,我们编写函数的目的就是为了封装,为了实现代码的模块化. 如果B能让A退出返回, 那这种编码方式肯怕比滥用 goto 语句还滥了. 这样做有必要吗?为什么一定要这样做

left() 函数是 VBScript 的函数,VBScript 将1个汉字看作1个字符,因此用 left()不能得到正确的字符长度...

vbscript|函数|汉字 left() 函数是 VBScript 的函数,VBScript 将1个汉字看作1个字符,因此用 left()不能得到正确的字符长度. 我自己编写了如下3个函数,用来取代 len().left().right(),希望能解决您的问题. '--------------------------------------------------------'Name:        lenX'Argument:        uStr'Return:'Description

使用函数栏输入Excel函数的操作方法

  使用函数栏输入Excel函数的操作方法           1.在工作表中选择需要插入函数的单元格,然后在编辑栏中输入"=",再在左侧的函数栏中单击下三角按钮,在打开的列表中选择需要使用的函数,如图1所示. 图1 选择函数 2.打开"函数参数"对话框,在"Number1"文本框中输入需要使用的参数,这里使用函数的默认值即可,完成参数设置后单击"确定"按钮关闭对话框,如图2所示.此时,所选单元格中显示了函数计算结果,如图3所

什么是虚函数,C++虚函数讲解

虚函数是在类中被声明为virtual的成员函数,当编译器看到通过指针或引用调用此类函数时,对其执行晚绑定,即通过指针(或引用)指向的类的类型信息来决定该函数是哪个类的.通常此类指针或引用都声明为基类的,它可以指向基类或派生类的对象. 多态指同一个方法根据其所属的不同对象可以有不同的行为. 下面来看一个例子: 程序运行输出结果: 8, 12 为什么Base 对象的大小是8个字节而不是4个字节,为什么Derived 对象的大小是12个字节而不是8个字节,多出来的4个字节做什么用呢?和多态的实现有什么

Excel函数应用教程:函数的参数

函数右边括号中的部分称为参数,假如一个函数可以使用多个参数,那么参数与参数之间使用半角逗号进行分隔. 参数可以是常量(数字和文本).逻辑值(例如TRUE或FALSE).数组.错误值(例如#N/A)或单元格引用(例如E1:H1),甚至可以是另一个或几个函数等.参数的类型和位置必须满足函数语法的要求,否则将返回错误信息. (1)常量 常量是直接输入到单元格或公式中的数字或文本,或由名称所代表的数字或文本值,例如数字"2890.56".日期"2003-8-19"和文本 &

Excel函数应用教程:函数与公式的概念

什么是函数? Excel函数即是预先定义,执行计算.分析等处理数据任务的特殊公式.以常用的求和函数SUM为例,它的 语法是"SUM(number1,number2,......)".其中"SUM"称为函数名称,一个函数只有唯一的一个名称,它决定了函数的功能和用 途.函数名称后紧跟左括号,接着是用逗号分隔的称为参数的内容,最后用一个右括号表示函数结束. 参数是函数中最复杂的组成部分,它规定了函数的运算对象.顺序或结构等.使得用户可以对某个单元格或区域进行处理,如分析存