1.C++的const类成员函数
C++中,若一个变量声明为const类型,则试图修改该变量的值得操作都被看做编译错误。
例如:const char blank = '';
blank = ' ';//错误
面向对象程序设计中,为了体现封装性,通常不允许直接修改类对象的数据程序。若要修改对象,
应调用公有成员函数来完成。为了保证const对象的常量性,编译器须区分不安全与安全的成员函数。
在C++中,只有被声明为const的成员函数才能被一个const类对象调用。要声明一个const类型的类成员函数,
只需要在成员函数参数列表后加上关键字const,
例如:
class Screen { public : char get() const; };
在类体之外定义const成员函数时,还必须加上const关键字
例如:
char Screen::get() const { return _screen[_cursor]; }
若将成员函数声明为const,则该函数不允许修改类的数据成员。
例如:
class Screen { public : int OK() const {return _cursor;} int ERROR(int ival) const{_curso = ival;} }
在上面成员函数的定义中,OK()的定义是合法的,ERROR()的定义则非法。
小结:
1)const成员函数可以访问非const对象的非const数据成员、const数据成员,也可以访问const对象内的所有数据成员;
2)非const成员函数可以访问非const对象的非const数据成员、const数据成员,但不可以访问const对象的任意数据成员;
3)作为一种良好的编程风格,在声明一个成员函数时,若该成员函数并不对数据成员进行修改操作,应尽可能将该成员函数声明为const 成员函数。
2.纯虚函数是做接口使用,一般在基类里面声明,派生类里面实现
虚函数是用作多态使用,基类的指针指向不同对象,可动态改变被调用的是基类的函数还是哪个派生类的函数
(一定是在基类里面的成员函数前添加virtual关键字)
1 class A 2 { 3 public: 4 virtual void foo() 5 { 6 cout<<"A::foo() is called"<<endl; 7 } 8 }; 9 class B:public A 10 { 11 public: 12 void foo() 13 { 14 cout<<"B::foo() is called"<<endl; 15 } 16 }; 17 int main(void) 18 { 19 A *a = new B(); 20 a->foo(); // 在这里,a虽然是指向A的指针,但是被调用的函数(foo)却是B的! 21 return 0; 22 }