iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++核心编程之类和对象详解
  • 395
分享到

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

2024-04-02 19:04:59 395人浏览 八月长安
摘要

目录1.封装1.1封装的意义封装意义一:封装意义二1.2 struct 和 class 区别1.3 成员属性设置为私有总结c++面向对象三大特性:封装、继承、多态 1.封装 1.1封

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

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: C++核心编程之类和对象详解

本文链接: https://www.lsjlt.com/news/134593.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++核心编程之类和对象详解
    目录1.封装1.1封装的意义封装意义一:封装意义二1.2 struct 和 class 区别1.3 成员属性设置为私有总结C++面向对象三大特性:封装、继承、多态 1.封装 1.1封...
    99+
    2022-11-12
  • C++核心编程之内存分区详解
    目录1、内存分区模型:2、代码区:3、全局区:4、小结:5、代码演示:6、运行结果:总结1、内存分区模型: C++程序在执行时,将内存大方向划分成4个区域 (1)代码区:存放安徽念书...
    99+
    2022-11-13
  • 详解C++之类和对象(2)
    目录一.构造函数1.构造函数的定义:2.构造函数的特征:3.构造函数的实现:3.1.系统默认的构造函数3.2无参构造3.3 带参构造二 析构函数1.析构函数的定义2.析构函数的特征三...
    99+
    2022-11-12
  • 详解C++之类和对象(1)
    目录C语言和C++的一大区别struct和class的区别总结c++类的由来(或者说为什么要增加类):我们知道c语言是面向过程的语言,c++是即面向过程又是面向过程的语言。那么这两个...
    99+
    2022-11-12
  • C++类和对象之多态详解
    目录多态基本概念和原理剖析多态案例1 计算器类纯虚函数和抽象类多态案例2 制作饮品虚析构和纯虚析构多态案例3 电脑组装多态基本概念和原理剖析 多态:多态是C++面向对象的三大特性之一...
    99+
    2022-11-12
  • C++类和对象之封装详解
    目录封装的意义以及示例访问权限公共权限 public保护权限 protected私有权限 privatestruct 和 class的区别成员属性私有化案例1:设计立方体类案例2:点...
    99+
    2022-11-12
  • Java核心编程之文件随机读写类RandomAccessFile详解
    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下RandomAccessFile  RandomAccessFile主要用于文件内容的读写访问访问模式  “r”:只读方式。  “rw”:打开以便读取和访问...
    99+
    2023-05-31
    java 读写类 randomaccessfile
  • C++面向对象编程之析构详解
    目录1. 概述2. 详论2.1. 对象生命周期2.2. 不一定需要显式析构2.3. 析构的必要性3. 总结1. 概述 类的析构函数执行与构造函数相反的操作,当对象结束其生命周期,程序...
    99+
    2022-11-13
  • 【C++心愿便利店】No.8---C++之重识类和对象
    文章目录 前言一、再谈构造函数二、static成员三、友元四、内部类五、匿名对象六、再次理解类和对象 前言 👧个人主页:@小沈YO. 😚小编介绍:欢...
    99+
    2023-10-27
    c++ 开发语言
  • C++类和对象基础详解
    目录一、类和对象的基本概念结构化程序设计面向对象的程序设计使用类的成员变量和成员函数二、类和对象基础 类成员的可访问范围构造函数(constructor)基本概念拷贝(复制)构造函数...
    99+
    2022-11-12
  • java核心编程之文件过滤类FileFilter和FilenameFilter
    本文实例为大家分享了文件过滤类FileFilter和FilenameFilter,供大家参考,具体内容如下FileFilterpackage test;import java.io.File;import java.io.FileFilte...
    99+
    2023-05-31
    java 文件过滤类 filefilter
  • Java多线程之并发编程的核心AQS详解
    目录一、AQS简介1.1、AOS概念 1.2、AQS的核心思想1.3、AQS是自旋锁1.4、AQS支持两种资源分享的方式 二、AQS原理2.1、同步状态的管理2....
    99+
    2022-11-12
  • C++学习笔记之类与对象详解
    目录前言:1.访问限定符:【问题】C++中 struct和class的区别是什么?2.封装【问题】在类和对象的阶段,我们只研究类的封装特性,那什么是封装呢?3.类的定义与声明【问题】...
    99+
    2022-11-12
  • C++初阶教程之类和对象
    目录类和对象<上>1. 类的定义2. 类的封装2.1 访问限定修饰符2.2 类的封装3. 类的使用3.1 类的作用域3.2 类的实例化4. 类对象的存储5. this 指...
    99+
    2022-11-13
  • C++核心编程之占位参数和默认参数
    目录1,默认参数2,函数占位参数1,默认参数 在c++中,函数的形参列表中的形参是可以有默认值的。 语法: 返回值类型 函数名 (参数 = 默认值)注意事项:1从左到右设置默认参数。...
    99+
    2022-11-13
  • C++深入讲解类与对象之OOP面向对象编程与封装
    目录1.面向对象编程2.面向过程性编程和面向对象编程3.类的引入4.类的定义4.1类的两种定义方式4.1.1声明和定义全部放在类体中4.2.2.声明和定义不放在类体中5.类的访问限定...
    99+
    2022-11-13
  • Python编程基础之类和对象
    目录零、本讲学习目标一、面向对象(一)程序员“面向对象”(二)两种编程思想实现五子棋(三)面向过程 vs. 面向对象 (四)面向对象三大特点1、封装...
    99+
    2022-11-13
  • C++之string类对象的容量操作详解
    目录前言1. size返回字符串的有效长度2. length 返回字符串的有效长度3. capacity 返回总空间的大小4. empty 检测是否为空串5. clear 清空有效字...
    99+
    2022-11-12
  • C++类与对象之运算符重载详解
    目录运算符重载加号运算符重载左移运算符重载递增运算符重载递减运算符重载赋值运算符重载关系运算符重载函数调用运算符重载总结运算符重载 运算符重载概念:对已有的运算符重新进行定义,赋予其...
    99+
    2022-11-12
  • Java语言面向对象编程思想之类与对象实例详解
    在初学者学Java的时候,面向对象很难让人搞懂,那么今天小编就来为大家把这个思想来为大家用极为简单的方法理解吧。首先我们来简单的阐述面向对象的思想。面向对象:官方的语言很抽象,我们把官方的解释和定义抛开。想想,自己有什么,对!!我们自己有手...
    99+
    2023-05-31
    java 面向对象 之类
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作