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

  • 类的成员

    • 数据成员

      • 描述数据的表示方法

        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)

    • 友元类
      • 多一个类是另一个类的友元,则该类及其所有成员都是友元

      • 定义

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

对象

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

C++语言-03-类与对象的更多相关文章

  1. [Objective-C语言教程]类和对象(24)

    Objective-C编程语言的主要目的是为C编程语言添加面向对象,类是Objective-C的核心特性,支持面向对象编程,通常称为用户定义类型. 类用于指定对象的形式,它将数据表示和方法组合在一起, ...

  2. Java面向对象03——类与对象的创建

    类的创建与初始化对象 age: 以类的方式组织代码,以对象的组织(封装)数据  package oop.demon01.demon02; ​ // 学生类(抽象模板) public class Stu ...

  3. OC语言-01类和对象

    // cc 文件名.m -framework Foundation 编译链接 #import <Foundation/Foundation.h> //枚举性别 typedef enum{ ...

  4. C/C++编程笔记:C++入门知识丨类和对象

    本篇要学习的内容和知识结构概览 类及其实例化 类的定义 将一组对象的共同特征抽象出来, 从而形成类的概念. 类包括数据成员和成员函数, 不能在类的声明中对数据成员进行初始化 声明类 形式为: clas ...

  5. flutter--Dart基础语法(三)类和对象、泛型、库

    一.前言 Flutter 是 Google 开源的 UI 工具包,帮助开发者通过一套代码库高效构建多平台精美应用,Flutter 开源.免费,拥有宽松的开源协议,支持移动.Web.桌面和嵌入式平台. ...

  6. Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量

    1 第一个OC控制台程序 1.1 问题 Xcode是苹果公司向开发人员提供的集成开发环境(非开源),用于开发Mac OS X,iOS的应用程序.其运行于苹果公司的Mac操作系统下. 本案例要求使用集成 ...

  7. iOS学习之Object-C语言类和对象

    一.OC语言的特点:封装,继承,多态:包含一个运行时系统:类库丰富. 二.面向对象      1.概述      OOP(Object Oriented Programming)面向对象编程.     ...

  8. oc语言学习之基础知识点介绍(二):类和对象的进一步介绍

    一.类.对象在内存中的存储 /* 内存分区: 栈:局部变量 堆:程序员自己写代码申请开辟的 程序员自己维护,编译器现在帮我们自动优化了,它在合适的给我们加上了释放空间的语句,所以我们现在写的对象不会造 ...

  9. OC语言的面向对象—类和对象、方法

    1. 面向对象和面向过程思想 OC是面向对象的,C是面向过程的.面向对象和面向过程只是解决问题的两种不同思想 1. 面向对象和面向过程的区别 1) 以用电脑听歌为例子 a) 面向过程 ➢ 打开电脑 ➢ ...

  10. Python Cookbook(第3版)中文版:15.19 从C语言中读取类文件对象

    15.19 从C语言中读取类文件对象¶ 问题¶ 你要写C扩展来读取来自任何Python类文件对象中的数据(比如普通文件.StringIO对象等). 解决方案¶ 要读取一个类文件对象的数据,你需要重复调 ...

随机推荐

  1. 结对编程之Fault、Error、Failure

    1.结对说明 结对对象:刘世麟  博客地址:http://www.cnblogs.com/liushilin/ 双方贡献:1:1 2.题目要求  构造程序,分别是:         •不能触发Faul ...

  2. SQL Server 2005 Service Broker

    一.引言 SQL Server 2005 的一个主要成就是可以实现可靠.可扩展且功能完善的数据库应用程序.与 .NET Framework 2.0 公共语言运行库 (CLR) 的集成使开发人员可以将重 ...

  3. 重构第14天 分离职责(Break Responsibilities)

    理解:面向对象的五大特征: SOLID,其中S就是职责单一原则.分离职责指当一个类有许多职责时,将部分职责分离到独立的类中,这样也符合面向对象的五大特征之一的单一职责原则,同时也可以使代码的结构更加清 ...

  4. easyui-treegrid节点选择

    easyui-treegrid本身不能实现选中父节点子节点全选,必须通过另外的方法来实现,这里说下如何通过修改节点样式添加checkbox来实现级联选择效果 首先需要格式化节点的样式 formatte ...

  5. sql联合查询去除重复计算总和

    1.首先来个联合查询 SELECT 字段1, 字段2, 字段3, 字段4 FROM 表1 INNER JOIN 表2 ON 表1.字段x = 表2.字段x x:代表随意的一个,只要在联合查询的两张表都 ...

  6. Studio for ASP.NET Wijmo:使用 C1Pager 对 DataList 控件分页

    Studio for ASP.NET Wijmo 控件值得称赞的一点是它不仅仅单独为 C1 控件而开发.还可以配合其他控件使用,也正体现了C1控件为提高开发人员工作效率而设计的宗旨.简单的举一个例子, ...

  7. Bootstrap 框架 栅格布局系统设计原理

    如果你是初次接触Bootstrap,你一定会为它的栅格布局感到敬佩.事实上,这个布局系统提供了一套响应式的布局解决方案. 既然这么好用,那他是如何用CSS来实现的呢? 我特意去Bootstrap官方下 ...

  8. FL2440驱动添加(2): RTC(Real time clock)

    一,Linux下的时间分为两种,系统时间与硬件时间(RTC芯片): 1,系统时间就是运行系统能够直接看到的时间: 2,硬件时间就是RTC芯片中的时间,断电任然有电池供电: linux系统开机时,会从R ...

  9. git 使用笔记(二)

    续 2.15 删除文件 $ rm testDel.txt删除掉工作区的testDel.txt文件, 1)这时可以通过git checkout -- testDel.txt从版本库恢复该文件到工作区 2 ...

  10. git version 2.5.0.windows.1中文乱码问题解决方案

    UI部分 Options->Text Local:zh_CN,Character set:GBK ~/.GitConfig [gui] encoding = utf-8 [tgit] proje ...