用 C++ 编写方法/函数的四种相同方法?

Posted

技术标签:

【中文标题】用 C++ 编写方法/函数的四种相同方法?【英文标题】:Four same ways of writing a method/function in C++? 【发布时间】:2013-03-17 17:38:33 【问题描述】:

今天我们在学校学习了用 C++ 编写方法/函数的四种方法,但我不确定我是否理解每种方法的概念以及它们之间的区别。他们都做同样的事情吗?第一段代码是类声明,第二段代码是类外的实现:

一)

1) Vector Addition(Vector a);

2) Vector Vector::Addition(Vector a)

    Vector temp = *this;
    temp.x+=a.x;
    temp.y+=a.y;
    return temp;

b)

1)Vector ConcreteInstanceAddition(Vector a, Vector b);

2) Vector Vector::ConcreteInstanceAddition(Vector a, Vector b)

    Vector temp=*this;
    temp.x=a.x+b.x;
    temp.y=a.y+b.y;
    return temp;

c)

1) friend Vector NonConcreteInstanceAddition(Vector a, Vector b);

2) Vector NonConcreteInstanceAddition(Vector a, Vector b)

    Vector temp(0,0);
    temp.x=a.x+b.x;
    temp.y=a.y+b.y;
    return temp;

d)

1) static Vector NonConcreteInstanceAdditionStatic(Vector a, Vector b);

2) Vector Vector::NonConcreteInstanceAdditionStatic(Vector a, Vector b)

    Vector temp(0,0);
    temp.x=a.x+b.x;
    temp.y=a.y+b.y;
    return temp;

这是主函数中的实现:

Vector a(0,0),b(0,0),c(0,0);

c=a.Addition(b);
//or
c.ConcreteInstanceAddition(a,b);
//or
c=NonConcreteInstanceAddition(a,b);
//or
c=Vector::NonConcreteInstanceAdditionStatic(a,b);

【问题讨论】:

您的第二个示例无法编译。这基本上是staticfriend的问题。 请更深入地解释一下。对不起,如果这是一个问题。我是一个初学者,所以如果一切听起来很愚蠢或不合逻辑,请告诉我:D 【参考方案1】:

你忘了更多: (独立式,按参数返回)

void Addition (const Vector& a, const Vector& b, Vector & result)

   result.x = a.x + b.x;
   result.y = a.y + b.y;
   return;

main函数中:

Addition(a, b, c);

使用const 和通过引用传递也有变化。

答案: a) 成员函数;可以使用没有this->的类变量。 修改“宿主”实例的成员变量。

b) 成员函数;不修改实例变量。

c) 具有访问类中方法和变量权限的独立函数。

d) 静态成员函数。可以在没有对象实例的情况下访问,但不能访问任何类变量。 (类变量需要一个实例。)

编辑 1: 您还可以通过实现operator+=()operator+() 再添加两个。

编辑2:静态成员函数的使用

c = Vector::NonConcreteInstanceAdditionStatic(a,b);

静态成员函数类似于使用独立函数,不同之处在于它位于类内部并且必须使用范围解析运算符:: 才能访问。

【讨论】:

非常感谢。我像这样使用第二个 c=c.ConcreteInstanceAddition(a,b);现在可以了。但是,我并不完全理解第四个功能。请告诉我如何在 main 函数中使用它。 如果这个答案有帮助,请检查一下。

以上是关于用 C++ 编写方法/函数的四种相同方法?的主要内容,如果未能解决你的问题,请参考以下文章

C++静态成员函数访问非静态成员的四种方法

Jquery调用webService的四种方法

面试题----僵尸进程的四种处理方法

JavaScript中函数的四种调用模式

C++运用循环+数组实现排序的四种常用方法(桶排序冒泡排序选择排序插入排序)

获得内核函数地址的四种方法