欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++深入探索類和對(duì)象之封裝及class與struct的區(qū)別

 更新時(shí)間:2022年05月18日 10:19:46   作者:對(duì)象new不出來  
C++?類與對(duì)象涉及的知識(shí)點(diǎn)非常廣泛,所以我準(zhǔn)備寫成幾個(gè)特定的部分來作為博文分享,這次的blog將詳細(xì)講解類的屬性、行為、訪問權(quán)限,class與struct的區(qū)別以及具體案例,希望能夠?qū)δ銈冇袔椭?,解決入門小白或者對(duì)這方面了解不多的朋友們,那么接下來開始今天的內(nèi)容

封裝的意義

封裝是C++三大面向?qū)ο笾?/p>

意義:

1、設(shè)計(jì)類的時(shí)候,屬性和行為寫在一起,表現(xiàn)事物

2、類在設(shè)計(jì)時(shí),可以把屬性和行為放在不同的權(quán)限下,加以控制

語法:class 類名 {訪問權(quán)限:屬性 / 行為};

示例1:設(shè)計(jì)一個(gè)直角三角形,并求解他的面積

#include<iostream>
using namespace std;
//class代表設(shè)計(jì)一個(gè)類,后面跟著的是類名
class taiAngle
{
public:  //訪問權(quán)限  公共的權(quán)限
	//屬性
    int m_a;//直角邊a
    int m_b;//直角邊b
	//行為
	//獲取三角形面積
	double calculate()
	{
		return (m_a*m_b)/2;
	}
};
int main() {
 
	//通過三角形類,創(chuàng)建三角形的對(duì)象
	// c1就是一個(gè)具體的三角形
	taiAngle c1;
	c1.m_a = 10; //給三角形兩邊進(jìn)行賦值操作
    c1.m_b = 10;
	cout << "三角形的面積為: " << c1.calculate() << endl;//調(diào)用方法
	system("pause");
	return 0;
}

示例2:設(shè)計(jì)一個(gè)學(xué)生類,屬性有姓名和學(xué)號(hào),可以給姓名和學(xué)號(hào)賦值,顯示學(xué)生的姓名和學(xué)號(hào)

//學(xué)生類
class Student {
public:
	void setName(string name) {
		m_name = name;
	}
	void setID(int id) {
		m_id = id;
	}
	void showStudent() {
		cout << "name:" << m_name << " ID:" << m_id << endl;
	}
private:
	string m_name;
	int m_id;
};
int main() {
	Student stu;
	stu.setName("馬可波羅");
	stu.setID(250);
	stu.showStudent();
	system("pause");
	return 0;
}
 

在第二個(gè)案例中,姓名和學(xué)號(hào)是不會(huì)被直接訪問的,主函數(shù)中我們創(chuàng)建了stu學(xué)生類對(duì)象,但是我們輸入“stu."時(shí)不會(huì)出現(xiàn)m_name和m_id的提示,這就牽扯到了訪問權(quán)限的知識(shí)點(diǎn),處于私有權(quán)限的屬性只能靠成員方法加以控制,繼續(xù)往下看

訪問權(quán)限

public 公共權(quán)限:

成員:類內(nèi)可以訪問,類外可以訪問

任何一種繼承,子類可以訪問父類的公共成員

保護(hù)權(quán)限protected

成員:類內(nèi)可以訪問,類外不可以訪問

任何一種繼承,子類可以訪問父類的保護(hù)成員

私有權(quán)限private

成員:類內(nèi)可以訪問,類外不可以訪問。

任何一種繼承,子類不可以訪問父類的私有成員

示例:

class Person
{
	//姓名  公共權(quán)限
public:
	string m_Phone;
	//手機(jī)  保護(hù)權(quán)限
protected:
	string m_Phone;
	//銀行卡密碼  私有權(quán)限
private:
	int m_Password;
public:
	void display();
};
void Person::display()
{
	m_Name = "張三";
	m_Phone = "華為";
	m_Password = 123456;
}
int main() {
	Person p;
	p.m_Name = "李四";
	//p.m_Phone = "iPhone 13";  //保護(hù)權(quán)限類外訪問不到
	//p.m_Password = 123;     //私有權(quán)限類外訪問不到
	system("pause");
	return 0;
}

這個(gè)案例中定義了三種權(quán)限的屬性,只有punlic:權(quán)限下的屬性和成員函數(shù)可以在類外被調(diào)用;這里的display方法我在public:權(quán)限下只是聲明的一下,然后在類外完成方法的實(shí)現(xiàn),但是需要在原來聲明的基礎(chǔ)上加"Person::"在返回值類型和函數(shù)名之間,以表示是Person這個(gè)類作用域下的display方法;main函數(shù)只可以調(diào)用display方法和修改m_Name屬性,因?yàn)橹挥羞@兩個(gè)在punlic:權(quán)限下了。

class和struct的區(qū)別

在C++中 struct和class唯一的區(qū)別就在于默認(rèn)的訪問權(quán)限不同

class 默認(rèn)權(quán)限是私有

struct 默認(rèn)權(quán)限是公共

示例:

class C1
{
	int  m_A; //默認(rèn)是私有權(quán)限
};
struct C2
{
	int m_A;  //默認(rèn)是公共權(quán)限
};
int main() {
	C1 c1;
	c1.m_A = 10; //錯(cuò)誤,訪問權(quán)限是私有
	C2 c2;
	c2.m_A = 10; //正確,訪問權(quán)限是公共
	system("pause");
	return 0;
}

class和struct中都定義了m_A屬性,但是main函數(shù)中是無法修改類c1對(duì)象的m_A屬性的

成員屬性私有

優(yōu)點(diǎn)1:將所有成員屬性設(shè)置為私有,可以自己控制讀寫權(quán)限

優(yōu)點(diǎn)2:對(duì)于寫權(quán)限,我們可以檢測(cè)數(shù)據(jù)的有效性

示例:

class Person {
public:
	//姓名設(shè)置可讀可寫
	void setName(string name) {
		m_Name = name;
	}
	string getName()
	{
		return m_Name;
	}
 
	//獲取年齡 
	int getAge() {
		return m_Age;
	}
	//設(shè)置年齡
	void setAge(int age) {
		if (age < 0 || age > 150) {
			cout << "你個(gè)大烏龜!" << endl;
			return;
		}
		m_Age = age;
	}
	//情侶設(shè)置為只寫
	void setLover(string lover) {
		m_Lover = lover;
	}
private:
	string m_Name; //可讀可寫  姓名
	int m_Age; //只讀  年齡
	string m_Lover; //只寫  愛人
};
int main() 
{
	Person p;
	//姓名設(shè)置
	p.setName("張三");
	cout << "姓名: " << p.getName() << endl;
	//年齡設(shè)置
	p.setAge(50);
	cout << "年齡: " << p.getAge() << endl;
	//愛人設(shè)置
	p.setLover("阿尼亞");
	//cout << "愛人: " << p.m_Lover << endl;  //只寫屬性,不可以讀取
	system("pause");
	return 0;
}

當(dāng)屬性都設(shè)計(jì)成私有時(shí),我們可以自己控制屬性的讀寫權(quán)限,讓程序更具有強(qiáng)壯性,通過寫方法來讀寫屬性,是不是很具有掌控性呢,接下來給出一個(gè)案例,加深理解。

案例練習(xí)

利用全局函數(shù)和成員方法兩種方式判斷兩個(gè)立方體是否相等,要求利用類的知識(shí),將屬性設(shè)置為私有。

參考代碼:

#include<iostream>
using namespace std;
//案例1 判斷兩個(gè)立方體是否相等
class Cube
{
public:
	void setL(int l)
	{
		m_L = l;
	}
	int getL()
	{
		return m_L;
	}
	void setW(int w)
	{
		m_W = w;
	}
	int getW()
	{
		return m_W;
	}
	void setH(int h)
	{
		m_H = h;
	}
	int getH()
	{
		return m_H;
	}
	int Area(int a, int b, int c)
	{
		return 2 * (a * b + a * c + b * c);
	}
	int 體積(int a, int b, int c)
	{
		return a * b * c;
	}
	bool isSameByClass(Cube& x)
	{
		if (x.getH() == m_H && x.getL() == m_L && x.getW() == m_W)
		{
			return true;
		}
		else {
			return false;
		}
	}
private:
	int m_L;
	int m_W;
	int m_H;
};
//利用全局函數(shù)判斷,兩個(gè)立方體是否相等
bool isSame(Cube& c1, Cube& c2)
{
	if (c1.getL() == c2.getL() && c1.getW() == c2.getW() && c1.getH() == c2.getH())
	{
		return true;
	}
	else
	{
		return false;
	}
}
int main()
{
	Cube c1;
	c1.setH(10);
	c1.setL(10);
	c1.setW(10);
	Cube c2;
	c2.setH(10);
	c2.setL(10);
	c2.setW(10);
	cout << "面積為:" << c1.Area(c1.getH(), c1.getH(), c1.getL()) << endl;
	cout << "體積為:" << c1.體積(c1.getH(), c1.getH(), c1.getL()) << endl;
	//利用成員函數(shù)判斷立方體
	if (c1.isSameByClass(c2))
	{
		cout << "兩個(gè)立方體相等" << endl;
	}
	else {
		cout << "兩個(gè)立方體不相等" << endl;
	}
	//利用全局函數(shù)判斷
	bool ret = isSame(c1, c2);
	if (ret)
	{
		cout << "兩個(gè)立方體相等" << endl;
	}
	else {
		cout << "兩個(gè)立方體不相等" << endl;
	}
}

這是案例的源代碼,是個(gè)非?;A(chǔ),能練習(xí)本篇博文內(nèi)容的案例,希望大家可以理解其中的代碼含義

到此這篇關(guān)于C++深入探索類和對(duì)象之封裝及class與struct的區(qū)別的文章就介紹到這了,更多相關(guān)C++封裝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ txt 文件讀取,并寫入結(jié)構(gòu)體中的操作

    C++ txt 文件讀取,并寫入結(jié)構(gòu)體中的操作

    這篇文章主要介紹了C++ txt 文件讀取,并寫入結(jié)構(gòu)體中的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 解析Linux內(nèi)核的基本的模塊管理與時(shí)間管理操作

    解析Linux內(nèi)核的基本的模塊管理與時(shí)間管理操作

    這篇文章主要介紹了Linux內(nèi)核的基本的模塊管理與時(shí)間管理操作,包括模塊加載卸載函數(shù)的使用和定時(shí)器的用法等知識(shí),需要的朋友可以參考下
    2016-02-02
  • C語言進(jìn)度條的實(shí)現(xiàn)原理詳解

    C語言進(jìn)度條的實(shí)現(xiàn)原理詳解

    這篇文章主要介紹了C語言進(jìn)度條的實(shí)現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C++中Qt的安裝與配置步驟詳解

    C++中Qt的安裝與配置步驟詳解

    Qt是一種C++編程框架,用于構(gòu)建圖形用戶界面(GUI)應(yīng)用程序和嵌入式系統(tǒng),無論是初學(xué)者還是經(jīng)驗(yàn)豐富的開發(fā)者,Qt都為構(gòu)建高質(zhì)量、可維護(hù)的應(yīng)用程序提供了豐富的工具和支持,本文主要給大家介紹了C++中Qt的安裝與配置步驟,需要的朋友可以參考下
    2023-12-12
  • 淺談C++左值引用和右值引用

    淺談C++左值引用和右值引用

    下面小編就為大家?guī)硪黄獪\談C++左值引用和右值引用。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • C語言形參和實(shí)參傳值和傳址詳解刨析

    C語言形參和實(shí)參傳值和傳址詳解刨析

    形參出現(xiàn)在函數(shù)定義中,在整個(gè)函數(shù)體內(nèi)都可以使用, 離開該函數(shù)則不能使用。實(shí)參出現(xiàn)在主調(diào)函數(shù)中,進(jìn)入被調(diào)函數(shù)后,實(shí)參變量也不能使用,形參和實(shí)參的功能是作數(shù)據(jù)傳送。發(fā)生函數(shù)調(diào)用時(shí), 主調(diào)函數(shù)把實(shí)參的值傳送給被調(diào)函數(shù)的形參從而實(shí)現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送
    2021-11-11
  • C++ OpenCV實(shí)現(xiàn)抖音"藍(lán)線挑戰(zhàn)"特效

    C++ OpenCV實(shí)現(xiàn)抖音"藍(lán)線挑戰(zhàn)"特效

    這篇文章主要介紹了如何使用OpenCV C++ 實(shí)現(xiàn)抖音上的特效“藍(lán)線挑戰(zhàn)”。文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)OpenCV有一定的幫助,需要的可以參考一下
    2022-01-01
  • C++實(shí)現(xiàn)簡(jiǎn)單迷宮游戲

    C++實(shí)現(xiàn)簡(jiǎn)單迷宮游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡(jiǎn)單迷宮游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • C語言實(shí)現(xiàn)階乘的示例詳解

    C語言實(shí)現(xiàn)階乘的示例詳解

    在現(xiàn)實(shí)中,我們做數(shù)學(xué)題總會(huì)遇到階乘問題,這在計(jì)算機(jī)中也不例外。 那我們應(yīng)該怎么實(shí)現(xiàn)呢?下面小編就為大家講解一下C語言中階乘的實(shí)現(xiàn)
    2022-07-07
  • C語言數(shù)字圖像處理之圖像縮放

    C語言數(shù)字圖像處理之圖像縮放

    這篇文章主要為大家詳細(xì)介紹了C語言數(shù)字圖像處理之圖像縮放,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評(píng)論