C++第一周

作者: SYSinsight | 来源:发表于2017-07-11 14:14 被阅读0次

    date: 2017-03-13 21:00:05

    class相关易错点


    • 类中的静态数据成员

      C++primer:static成员它不像普通的数据成员,static数据成员独立于该类的任意对象而存在,每个static数据成员是与类关联的对象,并不与该类的对象相关联。

    class Person { 
            public: 
                static int getNumberOfObjects(); 
            private: 
                static int numberOfObjects; 
    };
    int Person::numberOfObjects=0;
    
    2. 有且只有const int型的static变量能在类中初始化。如:
    
    class Person
    {
    private:
        static const int age=20;
        static string address;
        //这一个就不能在类中初始化,他不是static const int
    public:
    };
    
    3. 静态数据成员的特点
        * 对于非静态数据成员,每个类对象都有自己的拷贝。而静态数据成员被当作是类的成员。无论这个类的对象被定义了多少个,静态数据成员在程序中也只有一份拷贝,由该类型的所有对象共享访问。也就是说,静态数据成员是该类的所有对象所共有的。对该类的多个对象来说,静态数据成员只分配一次内存,供所有对象共用。所以,静态数据成员的值对每个对象都是一样的,它的值可以更新。
        * 因为静态数据成员在全局数据区分配内存,属于本类的所有对象共享,所以,它不属于特定的类对象,在没有产生类对象时其作用域就可见,即在没有产生类的实例时,我们就可以操作它。
        * 静态数据成员主要用在各个对象都有相同的某项属性的时候。
        * 同全局变量相比,使用静态数据成员有两个优势:
            1.静态数据成员没有进入程序的全局名字空间,因此不存在与程序中其它全局名字冲突的可能性。
            2.可以实现信息隐藏。静态数据成员可以是private成员,而全局变量不能。
    
    • 类中的静态成员函数
      1. 静态成员函数与静态数据成员一样,都是类的内部实现,属于类定义的一部分。普通的成员函数一般都隐含了一个this指针,this指针指向类的对象本身,因为普通成员函数总是具体的属于某个类的具体对象的。通常情况下,this是缺省的。如函数fn()实际上是this->fn()。
      2. 它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其余的静态成员函数。如果强行调用,编译器会发出“error: cannot call member function”
      3. 非静态成员函数可以任意地访问静态成员函数和静态数据成员。

    getline的作用与使用

    • 作用:从输入流中读入一行字符,并将缓冲区的\n抹去
    • 使用:现阶段简易使用:
    string str;
    getline(cin,str);
    

    即可

    几个之前没见过的编译错误

    • error: stray '\xxx' in program
      代表程序中有不少比较奇奇怪怪的低级错误,例如中文括号,中文分号等中文字符。

    • error: 'string' in namespace 'std' does not name a type
      代表无法识别string是什么,需要include<string>

    • collect2: error: ld returned 1 exit status
      最可能的是声明了函数却未定义,或者class中的静态数据成员未在class外定义

    • undefined reference

      也很可能是声明未定义问题,注意所指函数在哪个库中。

    • "<<": 没有找到接受"std::string"类型的右操作数的运算符(或没有可接受的转换)

      在实现函数的cpp文件中也要记得#include<string>

    相关文章

      网友评论

        本文标题:C++第一周

        本文链接:https://www.haomeiwen.com/subject/ldophxtx.html