十五、類與封裝的概念

1、類的封裝

C++中類的封裝:

  • 成員變量:C++中用于表示類屬性的變量
  • 成員函數:C++中用于表示類行為的函數
  • C++中可以給成員變量和成員函數定義訪問級別

    • public:成員變量和成員函數可以在類的內部和外界訪問和調用
    • private:成員變量和成員函數只能在類的內部被訪問和調用
#include <stdio.h>struct Biology 
{bool living;
};struct Animal : Biology 
{bool movable;void findFood(){ }
};struct Plant : Biology 
{bool growable;
};struct Beast : Animal 
{void sleep() { }
};struct Human : Animal 
{void sleep() { printf("I'm sleeping...\n");}void work() { printf("I'm working...\n");}
};struct Girl : Human
{
private:int age;int weight;    
// private修飾兩個屬性,定義訪問級別為私有public:void print(){age = 22;weight = 48;printf("I'm a girl, I'm %d years old.\n", age);printf("My weight is %d kg.\n", weight);}
};struct Boy : Human
{
private:int height;int salary;
public:int age;int weight;void print(){height = 175;salary = 9000;printf("I'm a boy, my height is %d cm.\n", height);printf("My salary is %d RMB.\n", salary);}    
};int main()
{Girl g;Boy b;g.age = 20;        // 編譯不過g.print();        // 通過print()去訪問b.age = 19;        // okb.weight = 120;b.height = 180;    // errb.print();return 0;
}

2、類成員的作用域

類成員的作用域:

  • 類成員的作用域都只在類的內部,外部無法直接訪問
  • 成員函數可以直接訪問成員變量和調用成員函數
  • 類的外部可以通過類變量訪問public成員
  • 類成員的作用域與訪問級別沒有關系

C++中用struct定義的夫中所有成員默認為 public

#include <stdio.h>int i = 1;struct Test
{
private:int i;public:int j;int getI(){i = 3;return i;}
};int main()
{int i = 2;Test test;test.j = 4;printf("i = %d\n", i);              // i = 2;printf("::i = %d\n", ::i);          // ::i = 1; 訪問默認命名空間,即全局作用域// printf("test.i = %d\n", test.i);    // Error, test.i是私有的printf("test.j = %d\n", test.j);    // test.j = 4printf("test.getI() = %d\n", test.getI());  // test.getI() = 3return 0;
}

3、小結

類通常可以分為使用方式和內部細節兩部分

類的封裝機制使得使用方式和內部細節相分離

C++中通過定義類成員的訪問級別實現封裝機制

public成員可以在類的內部和外界訪問和調用

private成員只能在類的內部被訪問和調用

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

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

相關文章

哪些人不能要 哪些人不能留

以下所有的論斷都是基于中小型實業公司而言&#xff0c;因為我任職過的公司都是這個類型的。招聘時這些人不能要&#xff1a;1&#xff09;頻繁跳槽的人。這些人要么對工作不用心&#xff0c;要么對環境的適應能力差&#xff0c;要么不愿去分析公司的長處和短處&#xff0c;要么…

vue項目中axios的封裝

1.安裝 1 npm install axios --save 2.新建http.js&#xff0c;封裝攔截器以及多種請求方式 1 import axios from axios;2 import { Message } from element-ui;3 4 // 請求攔截器5 axios.interceptors.request.use( 6 config > {7 //發送請求前需要做什么&#xff0c…

【2022】Java基礎面試真題

文章目錄1. Java基礎1.1 為什么Java代碼可以實現一次編寫、到處運行&#xff1f;1.2 一個Java文件里可以有多個類嗎&#xff08;不含內部類&#xff09;&#xff1f;1.3 說一說你對Java訪問權限的了解1.4 介紹一下Java的數據類型1.5 int類型的數據范圍是多少&#xff1f;1.6 請…

關于 Virtual SAN/VSAN 的常見問題解答

問&#xff1a;VSAN需要使用 SSD&#xff0c;它有什么用途呢&#xff1f; 答&#xff1a;SSD 用于讀取緩存 (70%) 和寫入緩沖 (30%)。每次寫入都會先轉到 SSD&#xff0c;稍后再取消暫存到 HDD。 ? 問&#xff1a;創建 VSAN 虛擬機存儲策略時&#xff0c;何時應使用“允許的故…

IntelliJ IDEA 中 右鍵新建時,選項沒有Java class的解決方法和具體解釋

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 我是在別人問我的時候&#xff0c;才發現還可以有這個問題&#xff0c;主要是他新項目直接打開&#xff0c;什么都沒配置&#xff0c;就打…

設計模式大集錦 程序員面試全攻略

摘要&#xff1a;無論你是參與Java面試還是C#面試&#xff0c;設計模式和軟件設計問題在程序員面試中是必不可少的一部分。編程和設計技兩者相得益彰&#xff0c;一名出色的程序員也是一名出色的設計師&#xff0c;他們懂得如何利用代碼來解決問題或者軟件設計&#xff0c;但是…

NOIP2018劃水記

Day -INF&#xff1a; 提前兩周左右停的課吧&#xff0c;每天過著正常的機房生活&#xff0c;每天充滿了歡樂。中間夾著籃球賽&#xff0c;qmcp大展神威&#xff08;%%%&#xff09;&#xff0c;MVP當之無愧&#xff0c;我跟著我們班一群菜雞劃水水出了季軍&#xff08;汗&…

多線程鎖,線程池,消費者生產者模型

鎖是怎么存在的? 在python建立之初,開發者目的是為了快速把語言開發出來,如果加上GIL(c語言加鎖),切換時按照100條字節指令來進行線程間的切換 為什么加鎖? 非線程安全,控制一段代碼 1.lock threading.BoundedSemaphore一次可以限制關卡,限制通行次數,不過這個是寫死的 1 im…

【2022】多線程并發編程面試真題

文章目錄4. 多線程4.1 創建線程有哪幾種方式&#xff1f;4.2 說說Thread類的常用方法4.3 run()和start()有什么區別&#xff1f;4.4 線程是否可以重復啟動&#xff0c;會有什么后果&#xff1f;4.5 介紹一下線程的生命周期4.6 如何實現線程同步&#xff1f;4.7 說一說Java多線程…

蘋果面試8大難題及答案

摘要&#xff1a;蘋果這樣的公司通常會在面試過程中向求職者拋出一些邏輯的問題來考研面試者&#xff0c;所以&#xff0c;如果你對進入蘋果感興趣&#xff0c;或者向往類似的公司&#xff0c;又或者只是對邏輯問題感興趣&#xff0c;這些面試難題值得你仔細研究。 導讀&#x…

idea自動導入jar包的快捷鍵

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 見&#xff1a;http://blog.csdn.net/u014771464/article/details/52330254 altenter&#xff08;光標緊跟在類的后面&#xff09;

ROS系統玩轉自主移動機器人(3)-- 開源機器人結構介紹

ROS系統玩轉自主移動機器人&#xff08;3&#xff09;-- 開源機器人結構介紹 本機器人機械結構設計相關的所有設計文件下載地址為&#xff1a;傳送門 其中包含&#xff1a;三維造型設計文件&#xff08;所有零件裝配效果&#xff09;&#xff08;tips&#xff1a;基于Solidwork…

【2022】JVM常見面試真題詳解

文章目錄5. JVM5.1 JVM包含哪幾部分&#xff1f;5.2 JVM是如何運行的&#xff1f;5.3 Java程序是怎么運行的&#xff1f;5.4 本地方法棧有什么用&#xff1f;5.5 沒有程序計數器會怎么樣&#xff1f;5.6 說一說Java的內存分布情況5.7 類存放在哪里&#xff1f;5.8 局部變量存放…

Linux 基本操作--文件查看 (day3)

一、查看文件-----cat (詳情參考:http://blog.sina.com.cn/s/blog_52f6ead0010127xm.html) 語法結構: cat 查看方式 文件 cat -A : show all 顯示所有內容,相當于-vET [rootlocalhost tmp]# cat -A /etc/profile #注釋:查看/erx/目錄下profile文件的內容 cat -b  :對非空…

如何在面試時寫出高質量的代碼

摘要&#xff1a;有些程序員由于平時沒有養成良好的編程習慣&#xff0c;在面試時寫出的代碼質量不高&#xff0c;最終遺憾地與心儀的公司和職位失之交臂。如何在面試時能寫出高質量的代碼&#xff0c;是很多程序員關心的問題。 程序員在職業生涯中難免要接受編程面試。有些程序…

IntelliJ IDEA添加jar包

見&#xff1a;http://blog.csdn.net/a153375250/article/details/50851049 以JDBC-MySQL驅動包為例 1、在IntelliJ IDEA中打開要添加jar包的Project 2、File – Project Structure如下圖 3、選擇Moudules – 再選擇Dependencies如下圖 4、選中Moudule source – 然后點擊2處號…

Python3 與 C# 并發編程之~ 進程篇

上次說了很多Linux下進程相關知識&#xff0c;這邊不再復述&#xff0c;下面來說說Python的并發編程&#xff0c;如有錯誤歡迎提出&#xff5e; 如果遇到聽不懂的可以看上一次的文章&#xff1a;https://www.cnblogs.com/dotnetcrazy/p/9363810.html 官方文檔&#xff1a;https…

11月12號 用戶登錄輸入密碼錯誤達到指定次數后,鎖定賬戶 004

用戶表里添加兩個屬性 連續密碼輸錯次數private Integer loginFailCount;/** 登錄失敗禁用時間 */ private Date missDate; / 如果登錄錯誤次數大于5次 規定時間內禁止登錄if(dbUser.getLoginFailCount() ! null && dbUser.getLoginFailCount() > 3){if(DateUtils.…

Goobuntu:谷歌的內部桌面系統

摘要&#xff1a;大多數Linux用戶都知道Google用Linux作為它們的桌面和服務器端操作系統&#xff0c;有的人可能還知道Google選擇的是定制的Ubuntu——Goobuntu&#xff0c;但在此之前幾乎沒有Google外部人員了解他們究竟是如何使用Ubuntu的&#xff0c;8月29日&#xff0c;Tho…

Springboot 之 Hibernate自動建表(Mysql)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 引入Maven依賴包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-…