博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++语言-03-类与对象
阅读量:5305 次
发布时间:2019-06-14

本文共 2700 字,大约阅读时间需要 9 分钟。

  • 类是面向对象编程中的核心概念,用于定义一个数据类型的蓝图,描述类的对象包括什么,以及可以在这些对象上执行那些操作。
  • 类的成员
    • 数据成员
      • 描述数据的表示方法

        class ClassName {accessType:    MemberVariableType memberVariable;};
    • 函数成员
      • 定义和原型写在类定义内部的函数,可以操作类的任意对象,可以访问对象中的任意成员,定义方式如下

        class ClassName {accessType:     // 函数成员    ReturnType functionName() {        // Body of the function    }} ClassInstance;/**     其中 ClassInstance 是类的实例,为可选项*/
      • 成员函数定义的方式
        • 在类的内部定义

          class Animal {public:     void run() {        cout << "Animal is running." << endl;    }};
        • 使用范围解析运算符 :: 在类的外部定义

          class Animal {// 数据成员public:    int age;// 函数成员public:    void run();};void Animal::run() {    cout << "Animal is running" << endl;}
  • 访问修饰符
    • 数据隐藏是OOP中重要的概念,C++使用访问修饰符实现数据隐藏的目的
    • 访问修饰符的种类
      • public
        • 在程序中类的外部可以访问
      • protected
        • 在该类中与私有成员的访问权限一样,但是在派生类中可以访问
      • private
        • 在程序中类的外部不可访问
        • 只有类和友元函数可以访问私有成员
  • this指针
    • 每一个类对象都有一个this指针指向自己的内存地址
    • 注意
      • this指针是所有成员函数的隐含参数,用来指向调用对象
      • 非成员函数没有this指针,如:友元函数,静态成员函数
    • 示例
      • 成员函数

        // 向类Animal中,添加成员函数 int compare(Animal animal) 比较两个动物,哪个更年长int compare(Animal animal) {    return this->age > animal.age;}
      • 友元函数

        // 向类Animal中添加友元函数 int compare(Animal animal)friend int compare(Animal animal);// 实现友元函数,在友元函数中使用this指针,会产生编译错误int compare(Animal animal) {    // error: Invalid use of 'this' outside of a non-static member function    return this->age > animal.age;}
  • 指向类的指针
    • 指向类的指针与指向结构的指针类似,访问成员需要使用成员访问运算符 ->,且与其他任何指针一样,在使用之前必须先初始化
    • 示例

      int main(int argc, const char * argv[]) {    // 类对象    Animal dog;    dog.age = 5;    dog.run();    // 指向类的指针    Animal *animalPointer;    animalPointer = &dog;    // 通过指向类的指针访问类的成员    cout << "Dog 的年龄为:" << animalPointer->age << endl;    return 0;}
  • 静态成员
    • 静态成员在类对象中只有一个副本,即被类的所有对象共享
    • 类型
      • 静态数据成员
        • 静态数据成员不能在类定义中初始化,在类定义外需要使用范围解析运算符 :: 重新声明从而对其初始化,若没有指定类的静态成员的初始化语句,静态数据成员会被初始化为零
        • 示例

          // 向类Animal添加静态数据成员animalCount,用于计算创建的动物的总数private:    static int animalCount;    // 若在类定义中初始化静态数据成员,将会报如下的编译错误    // Error: Non-const static data member must be initialized out of line    // static int animalCount = 0;    // 在类定义外初始化Animal类中的静态数据成员animalCount    int Animal::animalCount = 0;
      • 静态函数成员
        • 静态函数成员在类对象不存在的情况下,使用类名加范围解析运算符 :: 调用,使成员函数与具体的对象分离开
        • 静态成员函数的访问限制
          • 只能访问静态数据成员
          • 不能访问其他静态成员函数和类外部的其他函数
          • 具有类范围,不能范文this指针(与实际的类对象无关)
        • 示例

          // 向类Animal中添加静态成员函数,获取当前类的对象总数static int getAnimalCount() {    return animalCount;}
    • main()函数

      int main(int argc, const char * argv[]) {    cout << Animal::getAnimalCount() << endl;    Animal dog;    cout << Animal::getAnimalCount() << endl;    return 0;}
  • 友元
    • 友元函数(有关函数的详细内容请参阅下方Blog)
    • 友元类
      • 多一个类是另一个类的友元,则该类及其所有成员都是友元
      • 定义

        // 类Animalclass Animal {    // 定义AnimalAction为Animal的友元类    friend class AnimalAction;};// 友元类AnimalActionclass AnimalAction {   // body of the class};

对象

  • 对象是类的具体实例,指向内存中的一块地址,保存有与该对象相关的信息

转载于:https://www.cnblogs.com/theDesertIslandOutOfTheWorld/p/5216027.html

你可能感兴趣的文章
Codeforces Round #379 (Div. 2) E. Anton and Tree
查看>>
二维码
查看>>
设计模式六大原则(4):接口隔离原则
查看>>
小白必须懂的MongoDB的十大总结
查看>>
Mindjump!基于微信域名检测接口的跳转系统,实现微信跳转浏览器下载app
查看>>
环境决定未来
查看>>
PostgreSQL学习手册(十四) 系统视图
查看>>
记一次centos7内核可能意外丢失(测试直接干掉)恢复方法
查看>>
软工实践作业(八)
查看>>
Range Sum Query - Immutable
查看>>
[LeetCode] Median of Two Sorted Arrays
查看>>
Hibernate操作和保存方式
查看>>
Spring boot热部署配置[转]
查看>>
模拟实现select组件功能
查看>>
阅读任务-阅读提问
查看>>
浅谈JavaScript中闭包
查看>>
NativeXml (7):添加属性
查看>>
electron-api
查看>>
android自定义圆角实线边框,圆角虚线边框,直实线,虚实线,半圆角边框
查看>>
《随机出题软件》&《随机分队软件》源码(Windows API)
查看>>