C++語言的封裝
- 將屬性和行爲作爲一個整體,來表示生活中具體的事物
- 有訪問權限
- class 和struct唯一區別 默認權限不同
- class默認是private
- struct 默認是public
- public 是類內類外都可以訪問到
- protected 類內可以,類外不可以
- private 類內可以,類外不可以
c語言
struct Person
{
char mName[64];
int mAge;
};
struct Dog
{
char mName[64];
int mAge;
};
void PersonEat(struct Person *p)
{
printf("%s 在喫人飯 \n",p->mName);
}
void test01()
{
struct Person p1;
strcpy(p1.mName, "德瑪西亞");
PersonEat(&p1);
}
運行德瑪西亞 在喫人飯
。
但是
void DogEat(struct Dog * dog)
{
printf("%s 在喫狗糧 \n", dog->mName);
}
void test02()
{
struct Dog d;
strcpy(d.mName, "旺財");
DogEat(&d);
struct Person p1;
strcpy(p1.mName, "老王");
DogEat(&p1);
}
運行
旺財 在喫狗糧
老王 在喫狗糧
C語言封裝 屬性和行爲分開處理了 ,類型檢測不夠
c++的封裝
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
struct Person
{
char mName[64];
int mAge;
void PersonEat()
{
cout << mName <<"喫人飯" << endl;
}
};
struct Dog
{
char mName[64];
int mAge;
void DogEat()
{
cout << mName << "喫狗糧" << endl;
}
};
//C++中的封裝 嚴格類型轉換檢測, 讓屬性和行爲 綁定到一起
void test01()
{
Person p1;
strcpy(p1.mName, "老王");
p1.PersonEat();
}
int main(){
test01();
system("pause");
return EXIT_SUCCESS;
}
c++語言的public、protected、private
- public 類內 類外 都可以訪問
- protected 類內可以訪問 類外 不可以訪問 (子類可以方法)
- private 類內可以訪問 類外 不可以訪問 (子類不可以方法)
class Animal
{
private:
//如果我不聲明權限,默認的權限是 private
void eat(){ mAge = 100; };
int mAge;
public:
int mHeight;
protected: //保護權限 類內部可以訪問 ,(當前類的子類可以訪問) , 類外部不可以訪問
int mWeight;
void setWeight(){ mWeight = 100; };
};
//所謂私有權限 就是私有成員(屬性、函數) 在類內部可以訪問,類外部不可以方法
//公共權限 ,在類內部和類外部都可以訪問
void test02()
{
Animal an;
//an.eat();
//an.mAge; //私有不可以訪問到
an.mHeight = 100; //公有權限在類外部可以訪問到
//an.mWeight = 100; //保護權限 在類外不可訪問到
}
- 建議將所有成員屬性設置爲私有
- 自己提供公共的對外接口來進行 set或者get方法訪問