2021-01-28クロックインしてC ++を学習する8日目


真か偽かを判断するときは、ブール型を使用できます

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つのタイプがあります。

  1. 公的機関:メンバーはクラス内にアクセスでき、クラス外にもアクセスできます
  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)メンバー属性をプライベートに設定します

利点:

  1. すべてのメンバー属性をプライベートに設定すると、読み取りと書き込みのアクセス許可を自分で制御できます
  2. 書き込み権限については、データの有効性を確認できます
#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 ++チュートリアル

おすすめ

転載: blog.csdn.net/qq_42616280/article/details/113308286