一个小问题笔记

题目:

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; };

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容