【C++ grammar】抽象、封裝與this指針

目錄

  • 1、Abstraction and Encapsulation(抽象與封裝)
    • 1. Data Field Encapsulation (數據域封裝)
    • 2. Accessor and Mutator (訪問器與更改器)
      • 2.1. To read/write private data, we need get/set function (為讀寫私有數據,需要get/set函數)
      • 2.2. Signature of get function (General form) (get函數的一般原型)
      • 2.3. Signature of get function (Bool type) (布爾型get函數的原型)
      • 2.4. Signature of set function (set函數的原型)
    • 3. Class Abstraction and Encapsulation (類抽象與封裝)
      • 3.1. Class abstraction (類抽象)
      • 3.2. Class encapsulation (類封裝)
      • 3.3. 總結
  • 2、The Scope of Members & "this" pointer(成員作用域與this指針)
    • 1. The Scope of Data Members in Class (數據成員的作用域)
    • 2. Hidden by same name (同名屏蔽)
    • 3. The this Pointer (this指針)
    • 4. Simple way to avoid name hidden (避免重名屏蔽的簡單方法)這是一種比this指針更加簡單的方法
    • 5. 編碼規范
    • 6、需要注意的地方

1、Abstraction and Encapsulation(抽象與封裝)

1. Data Field Encapsulation (數據域封裝)

數據域采用public的形式有2個問題
(1) First, data may be tampered. ( 數據會被類外的方法篡改)
(2) Second, it makes the class difficult to maintain and vulnerable to bugs. ( 使得類難于維護,易出現bug)

class Circle {
public:double radius;//……
};
// main() {circle1.radius=5; //類外代碼可修改public數據

將radius放入私有區域進行封裝,使得從外部不能直接訪問radius。
在這里插入圖片描述

如果我們想對radius進行賦值或者讀取radius就需要使用到訪問器與更改器。

2. Accessor and Mutator (訪問器與更改器)

2.1. To read/write private data, we need get/set function (為讀寫私有數據,需要get/set函數)

(1) get function is referred to as a getter (獲取器,or accessor),
(2) set function is referred to as a setter (設置器,or mutator).

2.2. Signature of get function (General form) (get函數的一般原型)

returnType getPropertyName()

2.3. Signature of get function (Bool type) (布爾型get函數的原型)

bool isPropertyName()

2.4. Signature of set function (set函數的原型)

void setPropertyName(dataType propertyValue)、

3. Class Abstraction and Encapsulation (類抽象與封裝)

3.1. Class abstraction (類抽象)

The process of removing physical, spatial, or temporal details or attributes in the study of objects or systems in order to more closely attend to other details of interest ( 在研究對象或系統時,為了更加專注于感興趣的細節,去除對象或系統的物理或時空細節/ 屬性的過程叫做抽象)

3.2. Class encapsulation (類封裝)

A language mechanism for restricting direct access to some of the object’s components.( 一種限制直接訪問對象組成部分的語言機制)
A language construct that facilitates the bundling of data with the methods (or other functions) operating on that data ( 一種實現數據和函數綁定的語言構造塊)

3.3. 總結

抽象: 提煉目標系統中我們關心的核心要素的過程
封裝: 綁定數據和函數的語言構造塊,以及限制訪問目標對象的內容的手段

2、The Scope of Members & “this” pointer(成員作用域與this指針)

1. The Scope of Data Members in Class (數據成員的作用域)

The data members are accessible to all constructors and functions in the class. (數據成員可被類內所有函數訪問)
Data fields and functions can be declared in any order in a class. (數據域與函數可按任意順序聲明)
在這里插入圖片描述

2. Hidden by same name (同名屏蔽)

If a local variable has the same name as a data field: (若成員函數中的局部變量與某數據域同名)

(1) the local variable takes precedence ( 局部變量優先級高:就近原則)
(2) the data field with the same name is hidden. ( 同名數據域在函數中被屏蔽)

3. The this Pointer (this指針)

How do you reference a class’s hidden data field in a function? (如何在函數內訪問類中被屏蔽的數據域)? 可以使用 this 關鍵字
This 關鍵字的特性
(1) a special built-in pointer ( 特殊的內建指針)this指針不需要聲明也不需要賦初值。
(2) references to the calling object. ( 引用當前函數的調用對象)
在這里插入圖片描述
在這里插入圖片描述

4. Simple way to avoid name hidden (避免重名屏蔽的簡單方法)這是一種比this指針更加簡單的方法

class Circle {
public:Circle();Circle(double radius_){//this->radius = radius;radius = radius_; }
private:double radius;
public:void setRadius(double);//……};

5. 編碼規范

  1. If the parameter of a member function has the same name as a private class variable, then the parameter should have underscore
    suffix.

  2. 若類的成員函數參數與私有成員變量名相同,那么參數名應加下劃線后綴

例:

class SomeClass {int length;
public:void setLength( int length_ );

6、需要注意的地方

1、我們不可以修改this指針的值,使之指向另外一個對象
2、this指針是自動初始化的、this指針指向調用當前函數的對象、我們不可以顯示地聲明this指針。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377964.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377964.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377964.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java創建臨時文件_用Java創建一個臨時文件

java創建臨時文件The task is to create a temporary file in Java. 任務是用Java創建一個臨時文件。 Creating a temporary file 創建一個臨時文件 To create a temporary file in java – we use createTempFile() method of "File" class. The createTempFile()…

十九、圖像的形態學操作

一、圖像形態學 圖像形態學是圖像處理學科的一個單獨分支學科 主要針對的是灰度圖和二值圖像 是由數學的集合論以及數學中的拓撲幾何原理發展而來 二、膨脹操作(dilate) 33的卷積核 以33為卷積核從左往右(從上往下)開始運行,若這卷積核…

X名稱空間(WPF)

筆記簡述 閑話x名稱空間簡要x名稱空間的Attributex名稱空間的標簽擴展x名稱空間的XAML指令元素閑話 本筆記參考與《深入淺出WPF》、MSDN、Some Blog… MSDN的飛機票點這里。 x名稱空間簡要 在VS中新建個WpfApplication都會自動生成xmlns:x"http://schemas.microsoft.com/w…

基于Bresenham和DDA算法畫線段

直線:ykxb 為了將他在顯示屏上顯示出來,我們需要為相應的點賦值,那么考慮到計算機的乘法執行效率,我們肯定不會選擇用Ykxb這個表達式求值,然后進行畫線段。 我們應當是將它轉化為加法運算。 下面提供兩種常見的算法&am…

leetcode 106. 從中序與后序遍歷序列構造二叉樹 105. 從前序與中序遍歷序列構造二叉樹思考分析

目錄1、106題目2、參考思路:遞歸切割數組3、105題目4、同樣思路的代碼1、106題目 2、參考思路:遞歸切割數組 代碼參考:公眾號:代碼隨想錄 后序數組中序數組 以 后序數組(左右中)的最后一個元素作為切割點,先切中序數組…

按頻率對元素進行排序

Prerequisite: 先決條件: Hashing data structure 散列數據結構 How to write user-defined comparator for priority queue STL in C? 如何在C 中為優先級隊列STL編寫用戶定義的比較器? How to sort a map based on values instead of value? 如何根…

二十、分水嶺算法

一、基本原理 分水嶺算法主要是基于距離變換(distance transform),找到mark一些種子點,從這些種子點出發根據像素梯度變化進行尋找邊緣并標記 分水嶺:可以簡單的理解成一座山,然后來洪水了,水開…

細數WOW里暴雪的“親兒子”們

. 不知何時,魔獸世界的詞匯中忽然出現了一個新玩意:親兒子。雖說這個稱呼現在大多是拿來調侃法爺的,但江山代有兒子出,各領風騷一兩天,今天風光無限的法爺們也經歷過被其他職業壓得抬不起頭的小媳婦生涯。那么今天…

Linux下串口ttyS2,ttyS3不能用的問題解決辦法

PC104,Xlinux下,突然發現串口3,4不能用。。。 以為是硬件的問題,換成wince后,3,4工作正常,排除電路問題 在linux下查看dmesg: serial8250: ttyS0 at I/O 0x3f8 (irq 4) is a 16550Aserial8250: ttyS1 at I/O 0x2f8 (i…

安卓log.e函數打印示例_log1p()函數以及C ++中的示例

安卓log.e函數打印示例C log1p()函數 (C log1p() function) log1p() function is a library function of cmath header, it is used to get the natural logarithm (the base-e logarithm) of the one plus given value. It accepts a value (float, double, or long double) …

【C++grammar】C++類數據成員的初始化

目錄1、類成員的就地初始化example2、構造函數初始化3、默認構造函數:Default Constructor4、舉例5、成員的初始化方法的優先級1、類成員的就地初始化example class S { int m 7; // ok, copy-initializes m int n(7); // 錯誤:不允許用小括號初始化…

二十一、人臉檢測

一、識別圖像中的人臉 haarcascade_frontalface_alt_tree.xml lbpcascade_frontalcatface.xml GitHub上有Haar級聯檢測器源代碼可自行下載,lbp級聯檢測器也一樣有源碼可自行下載 也一樣 import cv2 as cv import numpy as npdef face_detect(image):gray cv.cvtC…

aspx特殊符號說明

http://www.cnblogs.com/GnagWang/archive/2010/07/14/1777130.html轉載于:https://www.cnblogs.com/mingyongcheng/archive/2011/11/24/2261253.html

javascript運算符_JavaScript中的按位運算符

javascript運算符JavaScript按位運算符 (JavaScript Bitwise Operators) A lot of times you come across some strange operators where youre knocking your head to understand what is going on in the code. Almost all the programming languages have bitwise operators…

[置頂] Android的IPC訪問控制設計與實現

3.3.1 IPC鉤子函數設計與實現 IPC Binder是Android最重要的進程間通信機制,因此,必須在此實施強制訪問控制。 1. 修改secuirty.h 打開終端shell,輸入指令“cd /android4.0/kernel/goldfish/include/linux/vim security.h”,找到結…

TensorFlow在Anaconda環境下創建

一、我使用的是Anaconda自帶的Jupyter編譯器,詳細的安裝教程可以參考博文 二、之后打開Jupyter 三、進行測試 我的tensorflow使用的是2.0版本 import tensorflow.compat.v1 as tf tf.disable_v2_behavior()a tf.constant([1.0,2.0],name"a") b tf.co…

leetcode 654. 構造最大二叉樹 思考分析

題目 給定一個不含重復元素的整數數組。一個以此數組構建的最大二叉樹定義如下: 二叉樹的根是數組中的最大元素。 左子樹是通過數組中最大值左邊部分構造出的最大二叉樹。 右子樹是通過數組中最大值右邊部分構造出的最大二叉樹。 通過給定的數組構建最大二叉樹&am…

Memcache的命令以及狀態監控

輸入telnet 127.0.0.1 11211(memcached默認端口為11211) stats :使用stats命令查看當前memcache服務器的狀態 pidmemcache服務器的進程IDuptime服務器已經運行的秒數time服務器當前的unix時間戳versionmemcache版本pointer_size當前操作系統 …

flush python_帶有示例的Python File flush()方法

flush python文件flush()方法 (File flush() Method) flush() method is an inbuilt method in Python, it is used to clear/flush the internal buffer, it is best practice while working with fila handling in Python, the internal buffer can be cleared before writin…

c++ 請拋棄匈牙利命名法 - 變量命名代碼風格的建議。

我只針對c碼農們講,其他語言不了解不過應該大同小異。曾幾何時翻開21天學通c系列等腦殘入門書,都以匈牙利命名法示人(DWORD dwXXX, int nXXX, string strXXX)。現在我可以負責任的告訴你,把類型名寫在前面屁用都沒有,對…