C++第一周

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

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

  • undefined reference

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

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

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

你可能感兴趣的:(C++第一周)