中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++類和對象之封裝及class與struct的區別是什么

發布時間:2022-05-18 11:23:38 來源:億速云 閱讀:149 作者:iii 欄目:開發技術

本篇內容主要講解“C++類和對象之封裝及class與struct的區別是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++類和對象之封裝及class與struct的區別是什么”吧!

封裝的意義

封裝是C++三大面向對象之一

意義:

1、設計類的時候,屬性和行為寫在一起,表現事物

2、類在設計時,可以把屬性和行為放在不同的權限下,加以控制

語法:class 類名 {訪問權限:屬性 / 行為};

示例1:設計一個直角三角形,并求解他的面積

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

示例2:設計一個學生類,屬性有姓名和學號,可以給姓名和學號賦值,顯示學生的姓名和學號

//學生類
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;
}

在第二個案例中,姓名和學號是不會被直接訪問的,主函數中我們創建了stu學生類對象,但是我們輸入“stu."時不會出現m_name和m_id的提示,這就牽扯到了訪問權限的知識點,處于私有權限的屬性只能靠成員方法加以控制,繼續往下看

訪問權限

public 公共權限:

成員:類內可以訪問,類外可以訪問

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

保護權限protected

成員:類內可以訪問,類外不可以訪問

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

私有權限private

成員:類內可以訪問,類外不可以訪問。

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

示例:

class Person
{
	//姓名  公共權限
public:
	string m_Phone;
	//手機  保護權限
protected:
	string m_Phone;
	//銀行卡密碼  私有權限
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";  //保護權限類外訪問不到
	//p.m_Password = 123;     //私有權限類外訪問不到
	system("pause");
	return 0;
}

這個案例中定義了三種權限的屬性,只有punlic:權限下的屬性和成員函數可以在類外被調用;這里的display方法我在public:權限下只是聲明的一下,然后在類外完成方法的實現,但是需要在原來聲明的基礎上加"Person::"在返回值類型和函數名之間,以表示是Person這個類作用域下的display方法;main函數只可以調用display方法和修改m_Name屬性,因為只有這兩個在punlic:權限下了。

class和struct的區別

在C++中 struct和class唯一的區別就在于默認的訪問權限不同

class 默認權限是私有

struct 默認權限是公共

示例:

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

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

成員屬性私有

優點1:將所有成員屬性設置為私有,可以自己控制讀寫權限

優點2:對于寫權限,我們可以檢測數據的有效性

示例:

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

當屬性都設計成私有時,我們可以自己控制屬性的讀寫權限,讓程序更具有強壯性,通過寫方法來讀寫屬性,是不是很具有掌控性呢,接下來給出一個案例,加深理解。

案例練習

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

參考代碼:

#include<iostream>
using namespace std;
//案例1 判斷兩個立方體是否相等
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;
};
//利用全局函數判斷,兩個立方體是否相等
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;
	//利用成員函數判斷立方體
	if (c1.isSameByClass(c2))
	{
		cout << "兩個立方體相等" << endl;
	}
	else {
		cout << "兩個立方體不相等" << endl;
	}
	//利用全局函數判斷
	bool ret = isSame(c1, c2);
	if (ret)
	{
		cout << "兩個立方體相等" << endl;
	}
	else {
		cout << "兩個立方體不相等" << endl;
	}
}

到此,相信大家對“C++類和對象之封裝及class與struct的區別是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

景宁| 高安市| 云林县| 东港市| 玉龙| 丁青县| 类乌齐县| 武宁县| 交城县| 石屏县| 新密市| 开鲁县| 高要市| 哈尔滨市| 萨迦县| 壶关县| 丹阳市| 同德县| 天气| 伊通| 彭阳县| 永昌县| 汤阴县| 平果县| 莱芜市| 弋阳县| 逊克县| 巴彦县| 玛多县| 秭归县| 龙游县| 秦皇岛市| 无极县| 宝鸡市| 宁陵县| 闻喜县| 平昌县| 宝应县| 江口县| 敖汉旗| 建湖县|