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<string>

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

  • undefined reference

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,803评论 18 399
  • C++文件 例:从文件income. in中读入收入直到文件结束,并将收入和税金输出到文件tax. out。 检查...
    SeanC52111阅读 2,883评论 0 3
  • 1.constructor构造函数 构造函数名称=类名。构造函数的作用:初始化对象的数据成员。 1.1 构造函数的...
    hui1429阅读 469评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,087评论 19 139
  • 目标:大宁情绪问题,面对困难能够不以哭的方式退缩,勇敢面对,自己学会先想办法解决 90天践行最大的目标就...
    轩宁爸阅读 114评论 0 0