zoukankan      html  css  js  c++  java
  • [C/C++] C++ 类的学习

    在  C++ 中用类来定义自己的 抽象数据类型 ( abstract data type )
    
    数据抽象能够隐藏对象的内部表示,同时仍然允许执行对象的公有 public 操作。
    
    1, 类作用域
    2, 构造函数
    3, this 指针
    
    与类有关的三个新特征  : 1), 类作用域 2), 可变成员 3), 静态成员。
    
    构造函数 : 。。。
    成员函数 : {
        成员函数有一个附加的隐含实参,将函数绑定到调用函数的对象
        trans.avg_price(); 则在 avg_price() 函数内部对 Sales_item 类成员的引用就是对 trans 成员的引用!
    }
    double avg_price() const; const 成员不能改变其所操作对象的数据成员。(const 此时必须同时出现在声明与定义中)
    
    struct 与 class 的区别!
    
    在声明和定义处指定 inline 都合法! 类内部定义的默认为 inline
    
    class Screen; 前向声明 (forward declaration)  不完全类型 (incomplete type)
    
    定义类型时,不进行存储分配。 定义对象时 : 进行分配空间!
    
    12.2 隐含的 this 指针
       1, 何时使用 this 指针。
               返回 *this
         Screen& Screen::move(index r, index c) {
         	      index row = r * 5;
         	      cursor = row + c;
         	      return *this;
         }
       2, 从 const 成员函数返回 *this
       	 不能从 const 成员函数返回指向类对象的普通引用。const 成员函数只能返回 *this 作为一个 const 引用。
       	 
       	 this 的类型是一个指向类类型的 const 指针。
       	 在 const 成员函数对象里 {
       	 	   this 的类型是一个指向 const 类类型对象的 const 指针。
       	 }
       3, 基于 const 的重载; void get();  void get() const;  const void get() const;
       
       4, 可变数据成员
                mutable 可变数据成员 
                private : mutable int count; 
                void so() const {
                 		count++;
                }
                这样就可以了!
      
     下半节
     最佳实践 :  单形参构造函数应该为 explicit
     最佳实践 :  定义和使用构造函数几乎总是较好的!
     
     Static
     static 函数没有 this 指针。
     static 成员不是任何对象的组成部分,所以 static 成员函数不能被声明为 const, 也不能为虚函数!
            将成员函数声明为 const 就是承诺不会修改该函数所属的对象!
     static 数据成员必须在类定义的外部定义 (正好一次)。
     static 成员不是通过类构造函数初始化的!而是在定义时进行初始化的!
     static 关键字只能用于类定义体内部的声明中!定义不能标识为 static.
     1, 特殊的整型 const static 成员
         & 一般 static 成员不能在类的定义体中初始化。例外的是 “整型 const static 成员可以再类内初始化”
         private :
             static const int period = 30;
     2, static 成员不是类对象的组成部分!
     
     总结 :
     1, 类是 C++ 中最基本的特征! 允许定义新的类型以适应应用程序的需要!
     2, “数据抽象” 是指定义数据和函数成员的能力, 而 “封装” 是指从常规访问中保护类成员的能力!
     3, 类可以定义构造函数,  它们是特殊的成员函数!
     4, 类可以将对其 非public 成员的访问权授予其他类或函数。 “友元”
     5, 类也可以定义 mutable 或 static 成员。
     

  • 相关阅读:
    Golang中使用set
    go 删除数组元素
    golang slice 简单排序
    WSGI 配置禁止反向DNS查找
    OpenStack Restful API框架介绍
    kubebuilder controller 资料学习
    package controllerutil
    JavaWeb开发好资料
    Hibernate3.6中文手册
    软件项目版本号的命名规则及格式
  • 原文地址:https://www.cnblogs.com/robbychan/p/3786715.html
Copyright © 2011-2022 走看看