zoukankan      html  css  js  c++  java
  • 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     }  
  • 相关阅读:
    增量式爬虫 Scrapy-Rredis 详解及案例
    scrapy-redis使用以及剖析
    为什么代码要写到匿名自执行函数中?
    Vue组件第三天--webpack
    Vue组价通信
    Vue组件第一天
    pip3 install pycryptohome
    selenium 安装与 chromedriver安装
    解决:'chromedriver' executable needs to be in PATH问题
    如何在VS Code中编写Python
  • 原文地址:https://www.cnblogs.com/SwiftAero/p/6394276.html
Copyright © 2011-2022 走看看