const类型的成员函数内部如何改变成员变量
2014-07-30 10:37
232 查看
转自:http://blog.csdn.net/qychjj/article/details/5914448
通过指针也能实现。
在C++中,由const修饰的成员函数的函数体内部,是不能够对成员变量进行修改的。这个特性被用来保证某些成员函数在实现过程中,避免由于程序员大意而对数据进行了错误的修改;同时也说明此成员函数是非修改性的。如只需要返回成员变量的成员函数就被声明为const类型(const的位置在函数定义参数列表之后)
推广开来,在const成员函数中也不能够调用非const的成员函数。这是因为非const成员函数可能会改变成员变量的值,这与const成员函数的定义相违背。
但是在某些情况下,需要在const函数中改变成员变量。这就需要把成员变量设置成mutable类型。如
class C
{
public:
void func(const int& p) const
{
i = p;
}
private:
mutable int i;
};
如果变量i不声明为mutable类型,则编译不会通过。
如果成员变量是一个类类型或者结构类型,而在const函数中调用这些变量的成员函数,除了用mutable声明外,还可以用一种变通的方法:
class D
{
public:
void op(){}
}
class C
{
public:
void func(const int& p, D& d) const
{
i = p;
d.op();
}
private:
mutable int i;
D cd;
};
然后在调用时,参数D& d以*this作为输入,也可以达到调用非const函数的作用。
P.S 最近阅读相关的文章,又学到了一种方法,能够使得在const成员函数中调用非const成员函数。就是使用const_cast<>运算符。它能够使得const去掉const的属性,使得violate属性去掉violate属性。上面的例子就可以写成。
void func() const
{
const_cast<D*>(&cd)->op();
}
同样能够编译通过。
通过指针也能实现。
在C++中,由const修饰的成员函数的函数体内部,是不能够对成员变量进行修改的。这个特性被用来保证某些成员函数在实现过程中,避免由于程序员大意而对数据进行了错误的修改;同时也说明此成员函数是非修改性的。如只需要返回成员变量的成员函数就被声明为const类型(const的位置在函数定义参数列表之后)
推广开来,在const成员函数中也不能够调用非const的成员函数。这是因为非const成员函数可能会改变成员变量的值,这与const成员函数的定义相违背。
但是在某些情况下,需要在const函数中改变成员变量。这就需要把成员变量设置成mutable类型。如
class C
{
public:
void func(const int& p) const
{
i = p;
}
private:
mutable int i;
};
如果变量i不声明为mutable类型,则编译不会通过。
如果成员变量是一个类类型或者结构类型,而在const函数中调用这些变量的成员函数,除了用mutable声明外,还可以用一种变通的方法:
class D
{
public:
void op(){}
}
class C
{
public:
void func(const int& p, D& d) const
{
i = p;
d.op();
}
private:
mutable int i;
D cd;
};
然后在调用时,参数D& d以*this作为输入,也可以达到调用非const函数的作用。
P.S 最近阅读相关的文章,又学到了一种方法,能够使得在const成员函数中调用非const成员函数。就是使用const_cast<>运算符。它能够使得const去掉const的属性,使得violate属性去掉violate属性。上面的例子就可以写成。
void func() const
{
const_cast<D*>(&cd)->op();
}
同样能够编译通过。
相关文章推荐
- const类型的成员函数内部如何改变成员变量
- c/c++笔试题——const类型的成员函数内部如何改变成员变量
- const类型的成员函数内部如何改变成员变量
- c/c++笔试题——const类型的成员函数内部如何改变成员变量
- c/c++笔试题——const类型的成员函数内部如何改变成员变量
- const成员函数内部如何改变成员变量
- 【转载】const用法详解,如何修饰变量,返回值以及成员函数
- 【c++笔记七】教你使用"const类型的对象、成员函数"和"static类型的成员函数、变量"
- const 成员函数不能改变成员变量的值,但是可以改变成员函数localstack变量的值
- C++ 成员变量为引用类型和const类型,如何赋值
- 关于空指针类型的类变量的成员函数访问的问题
- C++中的线程函数如何访问类中的成员变量
- const类型成员函数与mutable
- const成员函数如何调用non-const成员变量
- 线程的静态函数如何访问类的非静态成员函数或成员变量
- 如何在一个类中定义一个Friend类型的成员函数
- 单元测试时如何设定私有变量、调用私有成员函数
- 如何访问私有成员变量和函数
- C++中的线程函数如何访问类中的成员变量
- VC中外部函数如何获得对话框成员变量