通过const对象调用函数只能调用const函数或者是static函数

原创 2018年04月16日 23:32:02
class Base{
public:
    static void statmem() {
    std::cout << "in statmem of base\n" << std::endl;
  }
};
class Derived final :public Base{
public:
    void statmem() const {
    std::cout << "in statmem of Derived\n" << std::endl;
  }
};
void Derived::f(const Derived& deprived_obj){
  Base::statmem();
  Derived::statmem();
  deprived_obj.statmem();
  statmem();
}

今日在使用deprived_obj调用函数时编译没有什么问题,当去掉关键字static以后:

class Base{
public:
    void statmem() {
    std::cout << "in statmem of base\n" << std::endl;
  }
};
class Derived final :public Base{
public:
   void statmem() {
    std::cout << "in statmem of Derived\n" << std::endl;
  }
};
void Derived::f(const Derived& deprived_obj){
  Base::statmem();
  Derived::statmem();
  deprived_obj.statmem();
  statmem();
}

编译器报错:

error: passing 'const Derived' as 'this' argument discards qualifiers [-fpermissive]

deprived_obj.statmem();

 in call to 'void Derived::statmem()'

百度以后发现,const 的对象调用静态函数没有什么问题,但是调用非const函数就会有问题了。添加了const申明以后,编译通过。

class Base{
public:
    void statmem() const{
    std::cout << "in statmem of base\n" << std::endl;
  }
};
class Derived final :public Base{
public:
   void statmem() const {
    std::cout << "in statmem of Derived\n" << std::endl;
  }
};
void Derived::f(const Derived& deprived_obj){
  Base::statmem();
  Derived::statmem();
  deprived_obj.statmem();
  statmem();
}

为什么const对象只能调用const成员函数,而不能调用非const成员函数?

参考:http://www.cnblogs.com/cplinux/articles/5553716.html 在c++中,我们可以用const来定义一个const对象,const对象是不可以调用...
  • nawuyao
  • nawuyao
  • 2016-10-07 11:49:26
  • 1467

C++类中const函数与非const函数的调用规则

class EX{ public: void constFunction() const; };如上所示,通过将类成员函数声明为const,以表示这个函数不可以修改类对象。任何...
  • u014630623
  • u014630623
  • 2016-05-01 17:04:52
  • 2634

非const对象也可以调用const成员函数

当一个类只有const成员函数的时候,非const对象也可以调用const成员函数: // ConstTest.cpp : 定义控制台应用程序的入口点。 // #include "stdaf...
  • djb100316878
  • djb100316878
  • 2014-12-31 16:10:40
  • 3120

类中const函数及非const函数的调用规则

转自:点击打开链接 类中const函数及非const函数的调用规则 class Student { public: int getAge() ...
  • zjcxhswill
  • zjcxhswill
  • 2016-01-30 16:20:39
  • 1847

const成员对于const对象和非const对象的访问原则

const对象只能访问const成员函数。因为const对象表示其不可改变,而非const成员函数可能在内部改变了对象,所以不能调用。而非const对象既能访问const成员函数,也能访问非const...
  • lfw19891101
  • lfw19891101
  • 2011-01-10 10:46:00
  • 3058

const成员变量与成员函数

1)const成员函数可以访问(不可改变)所有对象(const对象和非const对象)的所有数据成员; 2)非const成员函数可以访问非const对象的非const数据成员、const数据成员...
  • huang_yx005
  • huang_yx005
  • 2016-05-18 15:24:49
  • 839

const成员函数、inline成员函数、static成员函数中关键字的位置

const成员函数 在类中用const修饰成员函数名, 在类外同样需要使用const修改其成员函数名。 否则,编译器会把它看成一个不同的函数。 当然,如果const成员函数直接在类中定义, 类外的...
  • xp178171640
  • xp178171640
  • 2015-10-03 11:06:50
  • 237

c++const指针与函数调用

在我的博客http://blog.csdn.net/caoyan_12727/article/details/52064958中,已经讨论了动态绑定和静态绑定,以及在缺省参数情况下虚函数的绑定情况。一...
  • caoyan_12727
  • caoyan_12727
  • 2016-09-10 10:50:01
  • 612

[C++] const对象只能调用const方法的原因

首先,对象的方法内修改成员内容是通过this指针实现的。比如A->fun(); 实际上会在fun中传入对象A的this指针。 其次,const对象在调用方法的时候,只能提供const类型的this指针...
  • bearcoding
  • bearcoding
  • 2014-12-19 16:01:05
  • 949

关于const对象和非const对象在函数参数传递式的规则

#include "iostream" using namespace std; int addItem(const int *p1,const int *p2){ return *p1+*p...
  • u010104710
  • u010104710
  • 2016-11-18 09:49:09
  • 664
收藏助手
不良信息举报
您举报文章:通过const对象调用函数只能调用const函数或者是static函数
举报原因:
原因补充:

(最多只允许输入30个字)