#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;
}
版权声明:本文为SAYA_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。