一个类的静态函数怎么调用这个类的成员变量,有方法吗

一个类的静态函数怎么调用这个类的成员变量,有方法吗,第1张

原因如下;
静态数据成员一样,静态成员函数是类的一部分,而不是对象的一部分。如果要在类外调用公用的静态成员函数,要用类名和域运算符“∷”。
如 Box∷volume( ); 实际上也允许通过对象名调用静态成员函数,如 avolume( ); 但这并不意味着此函数是属于对象a的,而只是用a的类型而已。 静态成员函数的作用是为了能处理静态数据成员。 可以说,静态成员函数与非静态成员函数的根本区别是:非静态成员函数有this指针,静态成员函数并不属于某一对象,它与任何对象都无关,静态成员函数没有this指针。
由此决定了静态成员函数不能访问本类中的非静态成员。 在C++程序中,静态成员函数主要用来访问静态数据成员,而不访问非静态成员。假如在一个静态成员函数中有以下语句: cout<<height<<endl; //若height已声明为static,则引用本类中的静态成员,合法 cout<<width<<endl; //若width是非静态数据成员,不合法。但是,并不是绝对不能引用本类中的非静态成员,只是不能进行默认访问,因为无法知道应该去找哪个对象。如果一定要引用本类的非静态成员,应该加对象名和成员运算符“”。如 cout<<awidth<<endl; //引用本类对象a中的非静态成员

是想定义在源文件吗?
1这是不允许的,因为模板类的成员函数的定义,是一种不完整的定义.
2由于编译器不知道模板参数的具体类型,无法为其成员函数生成代码.
3编译器在成员函数的调用处,才最终知道如何生成代码.
总之,模板类的成员函数的定义不能像普通类的成员函数一样,定义在源代码中,而只能定义在头文件中.
如果想定义在头文件中的模板类以外,倒是可以做到,如下:
template<class numtype>
Compare<numtype>::Compare(numtype a,numtype b){
x = a;
y = b;
}
template<class numtype>
numtype Compare<numtype>::max(){
return (x>y) x:y;
}
template<class numtype>
numtype Compare<numtype>::min(){
return (x<y) x:y;
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13403028.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-29
下一篇 2023-07-29

发表评论

登录后才能评论

评论列表(0条)

保存