class C{
public:
C(int val){}
~C(){}
C() = default;
void show(){
std::cout<<"C *this"<<std::endl;
}
void show()const{
std::cout<<"const C *this"<<std::endl;
}
static void test(){
std::cout<<" count_= "<<count_<<std::endl;
}
private:
int value_;
static int count_;
};
int C::count_ = 0;
int main(){
C c1(2);
c1.show();
const C c2(3);
c2.show();
C c3(4);
c3.test();
return 0;
}
普通方法编译以后,形参是一个C * this
的指针;
常成员方法编译以后,形参是一个const C* this
的指针;
常方法和普通方法show()构成重载。
静态方法编译以后没有this指针,调用不依赖对象,指定类的作用域即可。
这是三种方法的本质区别。
所以常对象不能调用普通方法,因为会将const C this赋值给C * this,不安全,编译不允许的。
常方法的const实际上修饰的是形参的this指针。*