类中的const成员函数

来源:互联网 发布:编程命名规范 编辑:程序博客网 时间:2024/05/20 21:22
#include<iostream>#include<string>using namespace std;class Student{private:    int age;    string name;public:    Student(int _age=2,string _name="null"):age(_age),name(_name){}    void add(Student& t){cout<<age+t.age<<endl;}    void show(){cout<<age<<endl<<name<<endl} };int main(){    const Student one;//#1    one.show();//#2        return 0;}

运行发现有错,编译器将拒绝#2行。因为show()的代码无法确保调用对象不被修改——调用对象和const一样,不应被修改。我们以前通过将函数参数声明为const引用或指向const的指针来解决这个问题。但是这里show()没有参数。解决办法就是将const放在函数括号的后面。也就是这样

void show() const           //声明

void Student::show()const      //定义

{

...........

}

再看一个相似的例子

#include<iostream>#include<string>using namespace std;class Student{private:    int age;    string name;public:    Student(int _age=2,string _name="null"):age(_age),name(_name){}    void add(Student& t){cout<<age+t.age<<endl;}};int main(){    Student a;    const Student b;    a.add(b);    //运行发现报错    //no known conversion for argument 1 from 'const Student' to 'Student&'    //很明显是const惹的祸    //只要改成add(const Student& t)    return 0;}


0 0
原创粉丝点击