C++核心編程之類和對象詳解
更新時間:2021年09月03日 15:00:05 作者:Gigi Princess
這篇文章主要介紹了C++編程進階之類和對象用法等相關使用技巧,需要的朋友可以參考下,希望能夠給你帶來幫助
C++面向對象三大特性:封裝、繼承、多態(tài)
1.封裝
1.1封裝的意義
- 將屬性和行為作為一個整體
- 將屬性和行為加以權限控制
封裝意義一:
語法:class 類名{ 訪問權限: 屬性 / 行為 };
//實例1
#define _CRT_SECURE_NO_WARNINGS 1
//求圓的周長
#include<iostream>
using namespace std;
#define pi 3.14
class circle
{
public:
int m_d;//直徑
double calculate()
{
return pi*m_d;
}
};
int main()
{
circle c1;
c1.m_d = 10;
cout << "圓周長為" << c1.calculate() << endl;
system("pause");
return 0;
}
//實例2
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
#include <string>
class Student
{
public:
string m_name;
int m_num;
void showStudent()
{
cout << " 姓名:" << "\t" << m_name << " 學號:" << m_num << endl;
}
void setname(string name)
{
m_name = name;
}
void setnum(int num)
{
m_num = num;
}
};
int main()
{
Student s1;
s1.setname("zhangsan");
s1.setnum(2001);
s1.showStudent();
Student s2;
s2.setname("lisi");
s2.setnum(2002);
s2.showStudent();
system("pause");
return 0;
}
總結:類中的 屬性 和 行為 統(tǒng)一稱為 成員
類中的 屬性 又稱為 成員屬性 成員變量
類中的 行為 又稱為 成員函數 成員方法
封裝意義二
訪問權限有三種
公共權限: public 成員類內可以訪問,類外可以訪問
保護權限: protected 成員類內可以訪問,類外不可以訪問 兒子可以訪問父親中的保護內容
私有權限: private 成員類內可以訪問,類外不可以訪問 兒子不可以訪問父親中的保護內容
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
#include <string>
class Student
{
public:
string m_name;
protected:
int m_num;
private:
int m_age;
public:
void func()
{
m_name = "lili";
m_num = 1;
m_age = 30;
}
private:
void func1()
{
m_name = "lili";
m_num = 1;
m_age = 30;
}
};
int main()
{
Student s1;
s1.m_name = "lilllll";
//s1.m_num = 2;//不可訪問
//s1.m_age = 20;//不可訪問
s1.func();
//s1.func1();//不可訪問
system("pause");
return 0;
}
1.2 struct 和 class 區(qū)別
在C++中 struct 和 class 區(qū)別在于 默認的訪問權限不同
- struct 默認權限為公共
- class 默認權限為私有
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
class C1
{
string m_a;
};
struct C2
{
string m_b;
};
int main()
{
//C1 c1;
//c1.m_a = "lili";//不可訪問
C2 c2;
c2.m_b = "lili";
system("pause");
return 0;
}
1.3 成員屬性設置為私有
優(yōu)點:
- 將所有成員屬性設置為私有,可以自己控制讀寫權限
- 對于寫權限,我們可以檢測數據的有效性
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include <string>
using namespace std;
class C1
{
public:
void setname(string name)
{
m_name = name;
}
string getname()
{
return m_name;
}
int getnum()
{
return m_num;
}
void setage(int age)
{
m_age = age;
}
private:
string m_name;
int m_num;
int m_age;
};
int main()
{
C1 c;
c.setname("yangyang");//可寫
cout << c.getname() << endl;//可讀
cout << c.getnum() << endl;//只讀
c.setage(30);//只寫
system("pause");
return 0;
}
好的,到這里封裝就算是學到手了,可以進行兩個小案例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include <string>
using namespace std;
class Cube
{
public:
void setchang(int chang)
{
m_c = chang;
}
void setkuan(int kuan)
{
m_k = kuan;
}
void setgao(int gao)
{
m_g = gao;
}
int getchang()
{
return m_c;
}
int getkuan()
{
return m_k;
}
int getgao()
{
return m_g;
}
int S()
{
return 2 * (m_c*m_g + m_c*m_k + m_g*m_k);
}
int V()
{
return m_c*m_g*m_k;
}
bool isSamebyclass(Cube &c)
{
if (m_c == c.getchang() && m_g == c.getgao() && m_k == c.getkuan())
{
return true;
}
return false;
}
private:
int m_c;
int m_k;
int m_g;
};
bool isSame1(Cube &c1, Cube &c2)
{
if (c1.getchang() == c2.getchang() && c1.getgao() == c2.getgao() && c1.getkuan() == c2.getkuan())
{
return true;
}
return false;
}
int main()
{
Cube c1;
c1.setchang(10);
c1.setkuan(10);
c1.setgao(10);
cout << "面積:" << c1.S() << endl;
cout << "體積:" << c1.V() << endl;
Cube c2;
c2.setchang(11);
c2.setkuan(11);
c2.setgao(11);
cout << "面積:" << c2.S() << endl;
cout << "體積:" << c2.V() << endl;
bool ret = isSame1(c1, c2);
if (ret)
{
cout << "全局函數判斷:兩個立方體相等" << endl;
}
else
{
cout << "全局函數判斷:兩個立方體不相等" << endl;
}
ret = c1.isSamebyclass(c2);
if (ret)
{
cout << "成員函數判斷:兩個立方體相等" << endl;
}
else
{
cout << "成員函數判斷:兩個立方體不相等" << endl;
}
system("pause");
return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include <string>
using namespace std;
class Point
{
public:
void setX(int x)
{
m_x = x;
}
int getX()
{
return m_x;
}
void setY(int y)
{
m_y = y;
}
int getY()
{
return m_y;
}
private:
int m_x;
int m_y;
};
class Circle
{
public:
void setR(int r)
{
m_r = r;
}
int getR()
{
return m_r;
}
void setcenter(Point center)
{
m_center = center;
}
Point getcenter()
{
return m_center;
}
private:
int m_r;
Point m_center;
};
void C_and_P(Circle &c, Point &p)
{
int distance = (c.getcenter().getX() - p.getX())*(c.getcenter().getX() - p.getX()) + (c.getcenter().getY() - p.getY())* (c.getcenter().getY() - p.getY());
int doubleR = c.getR()*c.getR();
if (distance==doubleR)
{
cout << "點在圓上" << endl;
}
else if (distance<doubleR)
{
cout << "點在圓內" << endl;
}
else
{
cout << "點在圓外" << endl;
}
}
int main()
{
Point p;
p.setX(10);
p.setY(30);
Circle c;
c.setR(10);
Point center;
center.setX(26);
center.setY(43);
C_and_P(c, p);
system("pause");
return 0;
}
總結
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

