真か偽かを判断するときは、ブール型を使用できます
1つ、クラスとオブジェクト
C ++オブジェクト指向の3つの主な特徴は次のとおりです。 カプセル化、継承、ポリモーフィズム
C ++は、すべてがオブジェクトであり、オブジェクトには属性と動作があると考えています
同じプロパティを持つオブジェクトは、抽象的にクラスと呼ぶことができます
1.パッケージ
(1)カプセル化の重要性:
-
人生の中で物事を表現するために、全体として属性と行動を取る
-
属性と動作の権限制御
(1)クラスを設計するときは、属性と振る舞いを一緒に記述して、物事を表現します。
構文: `クラスクラス名{アクセス権限:属性/動作};
インスタンス化:クラスからオブジェクトを作成します
クラス内の属性と動作は、まとめてメンバーと呼ばれます
属性は、メンバー属性またはメンバー変数とも呼ばれます
動作は、メンバー関数またはメンバーメソッドとも呼ばれます
例
#include<iostream>
using namespace std;
const double pi = 3.14;
//创建一个圆类,求其周长
class circle
{
public: //访问权限
int R; //属性:一般就是变量
double zhouchang() //行为:一般就是函数
{
return 2 * pi*R;
}
};
int main()
{
//通过圆类,创建具体的圆
circle c1;
c1.R = 5;
cout << "圆的周长为:" << c1.zhouchang() << endl;
system("pause");
return 0;
}
学生クラスの設計例、属性には名前と学生IDがあり、名前と学生IDに値を割り当てることができ、学生の名前と学生IDを表示することもできます
#include<iostream>
using namespace std;
#include<string>
//设计一个学生类,属性有姓名和学号
//可以给姓名和学号赋值,也可以显示学生的姓名和学号
class student
{
public://访问权限
string name; //属性
string ID;
void showstudent() //行为
{
cout << "学生姓名为:" << name << endl;
cout << "学生学号为:" << ID << endl;
}
};
int main()
{
student s1;
cout << "请输入学生姓名:";
cin >> s1.name;
cout << "请输入学生学号:";
cin >> s1.ID;
s1.showstudent();
system("pause");
return 0;
}
(2)クラスを設計するとき、属性と動作を異なる権限の下に配置して制御することができます
アクセス権には次の3つのタイプがあります。
- 公的機関:メンバーはクラス内にアクセスでき、クラス外にもアクセスできます
- 保護された保護機関:メンバーはクラス外ではなくクラス内にアクセスでき、息子は父親の保護されたコンテンツにアクセスできます
- プライベートプライベートパーミッション:メンバーはクラス内でアクセスでき、クラス外ではアクセスできません。息子は父親のプライベートコンテンツにアクセスできません。
(2)構造体とクラスの違い
C ++の2つの違いはデフォルトのアクセス許可は異なります
- 構造体のデフォルトのパーミッションはパブリックです
- クラスのデフォルトの権限はプライベートです
#include<iostream>
using namespace std;
#include<string>
//设计一个学生类,属性有姓名和学号
//可以给姓名和学号赋值,也可以显示学生的姓名和学号
class student1
{
string name1; //默认权限为私有
};
struct student2
{
string name2; //默认权限为公共
};
int main()
{
system("pause");
return 0;
}
(3)メンバー属性をプライベートに設定します
利点:
- すべてのメンバー属性をプライベートに設定すると、読み取りと書き込みのアクセス許可を自分で制御できます
- 書き込み権限については、データの有効性を確認できます
#include<iostream>
using namespace std;
#include<string>
class student
{
public:
void ReadName()
{
name = "张三";
cout << "姓名:" << name << endl;
}
void WriteAge(int a)
{
age = a;
}
void WriteScore(int b)
{
score = b;
}
void ReadScore()
{
cout << "分数:";
cout << score << endl;
}
private :
string name; //姓名 只读
int age; //年龄 只写
int score; //分数 可读可写
};
int main()
{
student s1;
s1.ReadName();
s1.WriteAge(18);
s1.WriteScore(450);
s1.ReadScore();
system("pause");
return 0;
}
実践事例1
立方体を設計し、立方体の面積と体積を見つけ、グローバル関数とメンバー関数を使用して、2つの立方体が等しいかどうかを判断します。
//设计立方体,求出立方体的面积和体积,分别用全局函数和成员函数判断两个立方体是否相等
#include<iostream>
using namespace std;
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 getS() //获取面积
{
return m_L * m_W * 2 + m_L * m_H * 2 + m_W * m_H * 2;
}
int getV()
{
return m_L * m_W*m_H;
}
bool issameC(cube c) //只需要传入一个就可以,因为本身就有一组数,所以传入的和原来的进行比较即可
{
if (m_L == c.getL() && m_W == c.getW() && m_H == c.getH())
return true;
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;
return false;
}
int main()
{
cube c1;
c1.setL(2);
c1.setW(3);
c1.setH(5);
cout << "c1立方体的长为:" << c1.getL() << endl;
cout << "c1立方体的宽为:" << c1.getW() << endl;
cout << "c1立方体的高为:" << c1.getH() << endl;
cout << "c1立方体的面积为:" << c1.getS() << endl;
cout << "c1立方体的体积为:" << c1.getV() << endl;
cube c2;
c2.setL(2);
c2.setW(3);
c2.setH(4);
bool flag1 = c1.issameC(c2); //利用成员函数判断
if (flag1 == true)
cout << "成员函数:两个立方体相同" << endl;
else
cout << "成员函数:两个立方体不相同" << endl;
bool flag2 = issame(c1,c2); //利用全局函数判断
if (flag2 == true)
cout << "全局函数:两个立方体相同" << endl;
else
cout << "全局函数:两个立方体不相同" << endl;
system("pause");
return 0;
}
練習例2
点と円の位置関係を決める
#include<iostream>
using namespace std;
//设定一个点类
class point
{
public:
void setX(int x) //设置横坐标
{
p_X = x;
}
int getX() //获取横坐标
{
return p_X;
}
void setY(int y) //设置纵坐标
{
p_Y = y;
}
int getY() //获取纵坐标
{
return p_Y ;
}
private:
int p_X;
int p_Y;
};
//设定一个圆类
class circle
{
public:
void setR(int r)
{
c_R = r;
}
int getR()
{
return c_R;
}
void setcenter(point center)
{
c_center=center;
}
point getcenter()
{
return c_center;
}
private:
int c_R; //半径
point c_center; //圆心
};
void isInCircle(circle &c, point &p)
{
int distenceP =
(c.getcenter().getX() - p.getX())*(c.getcenter().getX() - p.getX())+
(c.getcenter().getY() - p.getY())*(c.getcenter().getY() - p.getY());
int distenceR = c.getR()*c.getR();
if (distenceP == distenceR)
cout << "点在圆上" << endl;
else if(distenceP > distenceR)
cout << "点在圆外" << endl;
else
cout << "点在圆内 " << endl;
}
int main()
{
circle c;
point center;
point p;
c.setR(2);//圆半径
center.setX(0);
center.setY(0);
c.setcenter(center);
p.setX(0);
p.setY(1);
isInCircle(c, p);
system("pause");
return 0;
}
[注]学習コースは-ダークホースプログラムC ++チュートリアル