#頭條創作挑戰賽#
C++面向對象的三大特性為:封裝,繼承,多态。
1.封裝
封裝的意義:
1.将屬性和行為作為一個整體,表現生活中的事物
2.将屬性和行為加以權限控制。
文法: class 類名 { 通路權限: 屬性 / 行為};
const double PI = 3.14;
//class 代表設計一個類
class Circle{
//通路權限
public://公共權限
//屬性
int m_r;
//行為
//擷取圓的周長
double calcu(){
return 2 * PI * m_r;
}
}
int main(){
//通過圓類建立一個具體的圓(對象)
Circle c1;
c1.m_r = 10;
cout << "圓的周長:"<< c1.calcu() <<endl;
}
2.類的權限
class Student{
//通路權限
public://公共權限
//屬性
string name;//成員屬性,成員變量
int age;
//命名權限
void SetName(string Lname){//成員方法,成員函數
name = Lname;
}
}
int main(){
//通過學生類建立一個具體的學生(對象)
Student stu1;
//通過函數更改學生姓名
stu1.SetName("張三");
}
//類在設計時,可以把屬性和行為放在不同的權限下,加以控制
通路權限有三種:
1.public 公共權限
2.protected 保護權限
3.private 私有權限
//公共權限 public 類内可以通路 類外也可以通路
//保護權限 protected 類内可以通路 類外不可以通路 繼承中子類可以通路父類的,對于私有的父類不能讓子類繼承
//私有權限 private 類内可以通路 類外不可以通路
class Person{
public:
string name;
protected:
string car;
private:
int Password;
public:
void func(){//不管什麼權限,在類内都可以通路
name = "張三";
car = "拖拉機";
Password = 123456;
}
}
int main(){
Person p1;
p1.name = "李四";
p1.car = "奔馳";//錯誤 類外是不可通路protected權限
p1.Password = 123;//錯誤 類外是不可以通路private權限
p1.func();//可以通過類内的函數去調用類外不可通路的屬性或函數
}
3.struct 和class的差別
struct 預設的權限是 公共 public
class 預設的權限是 私有 private
4.成員屬性設定為私有
優點1:将所有成員屬性設定為私有,可以自己控制讀寫權限
優點2:對于寫權限,我們可以檢測資料的有效性
class Person{
private:
string n_name;//可讀可寫
int age;//隻讀
string c_car;//隻寫
public:
void setName(string name){
n_name = name;
}
string getName(){
return n_name;
}
int getAge(){
age = 0;//初始
return age;
}
void setCar(string car){
c_car = car;
}
}
int main(){
Person p1;
p1.setName("張三");//寫
cout << p1.getName() <<endl;//讀
cout << p1.getAge() <<endl;//讀
p1.setCar("奔馳");//寫
}
5.全局函數和成員函數
//分别利用全局函數和成員函數判斷正方形是否相等
//隻有正方形的長寬高相等就代表正方形相等
class Cube{
private:
int m_L;//長
int m_W;//寬
int m_H;//高
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;
}
bool isSame(Cube &c){//采用引用的方式,節省記憶體空間
if(m_L==c.getL() && m_W==c.getW() && m_H==c2.getH()){
return 1;
}else{
return 0;
}
}
}
bool isSame(Cube &c1,Cube &c2){//采用引用的方式,節省記憶體空間
if(c1.getL()==c2.getL() && c1.getW()==c2.getW() && c1.getH()==c2.getH()){
return 1;
}else{
return 0;
}
}
void main(){
Cube c1;
c1.setL(10);
c1.setW(10);
c1.setH(10);
Cube c2;
c2.setL(10);
c2.setW(10);
c2.setH(10);
//調用全局函數判斷
if(isSame(c1,c2)){
cout <<"正方形相同"<<endl;
}else{
cout <<"正方形不相同"<<endl;
}
//調用成員函數判斷
int rel = c1.isSame(c2);
if(rel){
cout <<"正方形相同"<<endl;
}else{
cout <<"正方形不相同"<<endl;
}
}