一个类的常规实例可以调用常量函数吗?

时间:2015-11-14 12:05:52

标签: c++ class constants member

我知道常量对象或函数只能在常量成员上运行,但它是否能以相反的方式运行?

2 个答案:

答案 0 :(得分:2)

Regular(非const)类成员函数可以调用任何const和非const类成员函数。

答案 1 :(得分:2)

简短回答

这就是C ++中 stra() as string={666,66,333,55} stra2()as string={1,2,3,4} For j = 0 To stra.GetLength(0) Const ForReading = 1 Const ForWriting = 2 Dim objFSO = CreateObject("Scripting.FileSystemObject") Dim objFile = objFSO.OpenTextFile(OpenFileDialog1.FileName, ForReading) Dim strText = objFile.ReadAll objFile.Close() Dim strNewText = Regex.Replace(strText, stra(j), stra2(j)) objFile = objFSO.OpenTextFile(OpenFileDialog1.FileName, ForWriting) objFile.WriteLine(strNewText) objFile.Close() Next 函数的美妙之处。您可以根据其const - ness:

重载方法
const

class Vector { public: int GetItem(); int GetItem() const; }; 对象会导致调用const方法,但非const(const Vector)会导致调用非const。让编译器找出要调用的方法(const或非const)。因此:

Vector

可以根据v.GetItem(); 的实际类型调用其中任何一个。

为什么C ++允许它考虑任何" 获取"方法应该是只读函数吗? 好吧,不是语言律师的理由,请考虑这一点。

vector v; v [0] = 10;

如果v中的重载运算符被声明为vector<>,则不允许运算符(const)在左侧使用(即作为l-值)。 如果仅提供非const,则会失败:

[]

但是由于方法可以在void process(const vector<int>& v) { cout << v[0]; // Must call const op [] } 的基础上重载,编译器会计算出要调用的重载。

另一方面,C ++允许const转换为非const,反之亦然(const和C风格转换),你总是可以从a调用另一个版本(非)const对象。

const_cast