C++注意的东西

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     }  
原文地址:https://www.cnblogs.com/SwiftAero/p/6394276.html