c++怎么实现用类名调用函数,而不是用对象名调用函数,这种函数应该怎么写,和普通的成员函数有什么区别
你说的是类的静态成员函数(static函数),而不是普通的成员函数,static函数属于类调用,而不属于某个具体的对象。
例如,常用的工厂模式中,可以通过A的static函数createA()来创建A类对象,而不是直接调用A的构造函数。这样,可以避免用户私自构造A类对象。
class A
{
public:
static A createA()
{ return A(-1); }
private:
A(int val) : value_(val) {}
int value_;
};
我们可以通过A::createA() 来创建A的对象,而不是a.createA()(a是A类对象)来创建A的对象,因为要构建一个对象前,还没有该对象。
特点:
1)类函数用static修饰,由类名::函数名 来调用,而非对象名.函数名调用。(当然也支持第二种调用方式)
2)static函数无法直接访问对象成员,即类的非static成员;