美文网首页
一个小问题笔记

一个小问题笔记

作者: 铭小汁儿 | 来源:发表于2017-06-19 22:37 被阅读0次

题目:

auto x = sq(3.14); 实现sq,用所有你能想到的方法,看看有多少种?


题目要求实现一个函数,故利用C++可有6种实现方法。具体如下:


1、宏定义

#define sq(x) ((x) * (x))


2、直接声明函数

double sq(double x){ return x * x; };


3、利用类中的函数对象即对运算符()进行重载来实现要求

class A{

      public:

            A();

            double operator() (double x){ return x * x; };

            virtual ~A();

};

int main(){

      A sq;

      auto x = sq(3.14);

}


4、利用结构体,对运算符()进行重载来实现要求(其实结构体和类行为上较类似)

struct A{

      double operator() (double x){ return x * x; };

};

int main(){

      struct A sq;

      auto x = sq(3.14);

}


5、利用函数模版来实现要求

template <typename name>

name sq(name x){ return x * x; };


6、利用lambda表达式来实现要求(匿名函数,lambda是C++11引入的新特性)

实现一:

auto sq = [](double x){ return x * x; };

实现二:

std::function<double(double)> sq = [](double x){ return x * x; };

相关文章

网友评论

      本文标题:一个小问题笔记

      本文链接:https://www.haomeiwen.com/subject/ajmnqxtx.html