用 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);
【问题讨论】:
您的第二个示例无法编译。这基本上是static
和friend
的问题。
请更深入地解释一下。对不起,如果这是一个问题。我是一个初学者,所以如果一切听起来很愚蠢或不合逻辑,请告诉我: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++ 编写方法/函数的四种相同方法?的主要内容,如果未能解决你的问题,请参考以下文章