为什么构造函数需要范围分辨率来定义它在体外?

时间:2016-02-11 13:39:56

标签: c++

如果我们在类中声明一个类的成员函数并在类之外编写它的定义,那么我们需要使用范围解析运算符,因为在其他类中可能有n个相同名称的函数。 ..

//assume required header libraries included
class temp{
int x;
public:
void outp();
};
class qwerty{
int x;
public:
void outp()
{ std::cout<<x;}
};
void temp::outp()
{ std::cout<<x; }

但是因为类名总是唯一的...所以构造函数名称也是唯一的,所以为什么我们仍然需要使用范围解析来定义类体外的构造函数

class temp{
int x;
temp();
};
temp::temp(){
x=0;
}

而不是直接

temp(){
x=0;
}

或者

::temp(){
x=0
};

就像我在c ++中所知道的那样,我们需要使用范围分辨率来解决范围之外的问题...那么为什么不用上面的代码......?

1 个答案:

答案 0 :(得分:4)

在C的早期,您没有必须明确指定函数的返回类型。如果你没有,则假定为int。当C ++发展时,它需要向后兼容C,并且已经有很多C程序在某种程度上依赖于这种行为。多年来,即使没有指定返回类型在C和C ++中都成了错误,编译器仍然只为它生成警告,可能是为了避免破坏现有代码。

因此,在那个时候,写下像

这样的东西
MyClass() { /* ... */ }

可能已被解释为函数int MyClass(void)。如果你写了一堂课,你就不想和那个功能发生冲突。

此外,由于构造函数函数,毕竟,一致地处理所有成员函数定义是有意义的。