温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++核心编程类和对象详解

发布时间:2021-09-03 16:20:16 阅读:116 作者:chen 栏目:开发技术
C++开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

本篇内容介绍了“C++核心编程类和对象详解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

目录
  • 1.封装

    • 1.1封装的意义

      • 封装意义一:

      • 封装意义二

    • 1.2 struct 和 class 区别

      • 1.3 成员属性设置为私有

      C++面向对象三大特性:封装、继承、多态

      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;
      }

      总结:类中的 属性行为 统一称为 成员

      类中的 属性 又称为 成员属性 成员变量

      类中的 行为 又称为 成员函数 成员方法

      封装意义二

      访问权限有三种

      公共权限: 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 区别

      在C++中 struct 和 class 区别在于 默认的访问权限不同

      • 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 成员属性设置为私有

      优点:

      • 将所有成员属性设置为私有,可以自己控制读写权限

      • 对于写权限,我们可以检测数据的有效性

      #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;
      }

      “C++核心编程类和对象详解”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

      亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

      向AI问一下细节

      免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

      c++
      AI

      开发者交流群×