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

总结

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

(0)

相关推荐

  • C++ 类和对象基础篇

    类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量:创建对象的过程也叫类的实例化.每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数. 一.类的定义 一个简单的类的定义: class Student{ public: //成员变量 char *name; int age; float score; //成员函数 void say(){ cout<<name<<"的年龄是"<<age<<&qu

  • c++ 类和对象总结

    话不多说,我们直接进入主题: 对象:客观世界里的一切事物都可以看作是一个对象,每一个对象应当具有属性(静态特征,比如一个班级,一个专业,一个教室)和行为(动态特征,例如:学习,开会,体育比赛等)两个要素. 对象是由一组属性和一组行为构成的. 类(class):就是对象的类型,代表了某一批对象的共同特性和特征.类是对象的抽象,而对象是类的具体实例. 2.1 类的引入 在C语言中我们定义一个结构体是这样定义的: struct Student { int _age; char* _Gender; ch

  • C++类和对象基础详解

    目录 一.类和对象的基本概念 结构化程序设计 面向对象的程序设计 使用类的成员变量和成员函数 二.类和对象基础 类成员的可访问范围 构造函数(constructor) 基本概念 拷贝(复制)构造函数 类型转换构造函数 析构函数(destructors) 总结 一.类和对象的基本概念 结构化程序设计 C语言使用结构化程序设计: 程序 = 数据结构 + 算法 程序由全局变量以及众多相互调用的函数组成 .算法以函数的形式实现,用于对数据结构进行操作. 结构化程序设计的不足 1.结构化程序设计中,函数和

  • C++OOP对象和类的详细讲解

    目录 C++OOP对象和类 1.预备知识 2.抽象和类 2.1 数据抽象 2.2 类 2.3 接口 3.C++中的类和对象 3.1 C++类的定义 3.2 C++对象的定义 3.3 C++访问数据成员 3.4 C++类成员函数 总结 C++OOP对象和类 本文将从入门的角度介绍C++OOP中的类和对象,事实上C++的类和对象远远不止本文所介绍的内容. 不过如果你感兴趣,我会把其他的内容逐一通过文章的形式介绍给你. 1.预备知识 面向对象编程(OOP)是一种特殊的.设计程序的概念性方法,C++通过

  • C++之string类对象的容量操作详解

    目录 前言 1. size返回字符串的有效长度 2. length 返回字符串的有效长度 3. capacity 返回总空间的大小 4. empty 检测是否为空串 5. clear 清空有效字符 6. resize 修改个数并填充 7. reserve 为字符串预留空间 总结 前言 hello,大家好,今天这期文章我们用来介绍string类对象的容量操作.希望对大家有所帮助,让我们开始吧. 1. size返回字符串的有效长度 返回字符串的长度,以字节为单位.这是符合字符串内容的实际字节数,不一

  • C++中对象&类的深入理解

    什么是对象 任何事物都是一个对象, 也就是传说中的万物皆为对象. 对象的组成: 数据: 描述对象的属性 函数: 描述对象的行为, 根据外界的信息进行相应操作的代码 具有相同的属性和行为的对象抽象为类 (class) 类是对象的抽象 对象则是类的特例 面向过程 vs 面向对象 面向过程 面向过程的设计: 围绕功能, 用一个函数实现一个功能 程序 = 算法 +数据结构 算法和数据结构两者互相独立, 分开设计 面向对象 面向对象的设计: 把算法和数据封装在一个对象中 设计所需要的歌者类和对象 向有关对

  • 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

  • C++核心编程之内存分区详解

    目录 1.内存分区模型: 2.代码区: 3.全局区: 4.小结: 5.代码演示: 6.运行结果: 总结 1.内存分区模型: C++程序在执行时,将内存大方向划分成4个区域 (1)代码区:存放安徽念书体的二进制代码,由操作系统进行管理的 (2)全局区:存放全局变量和静态变量以及常量 (3)栈区:由编译器自动分配释放,存放函数的参数值,局部变量等 (4)堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收 内存四区意义:不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程 2.

  • Java异步编程工具Twitter Future详解

    目录 异步编程(Twitter Future) 为啥要异步 基本用法 1.封装计算逻辑,异步返回. 2.异步计算结果串联异步处理 3.并行多个异步任务,统一等待结果 4.异步错误处理 Twitter包装 pom依赖 1.封装计算逻辑,异步返回 2.异步计算结果串联异步处理 3.并行多个异步任务 4.错误处理 其他用法 其他工具 异步编程(Twitter Future) 为啥要异步 异步编程有点难以理解,这东西感觉不符合常理,因为我们思考都是按照串行的逻辑,事都是一件一件办.但在异步计算的情况下,

  • JavaScript浏览器对象之一Window对象详解

    JavaScript提供了一组以window为核心的对象,实现了对浏览器窗口的访问控制.JavaScript中定义了6种重要的对象: window对象 表示浏览器中打开的窗口: document对象 表示浏览器中加载页面的文档对象: location对象包含了浏览器当前的URL信息: navigation对象 包含了浏览器本身的信息: screen对象 包含了客户端屏幕及渲染能力的信息: history对象 包含了浏览器访问网页的历史信息. 除了window对象之外,其他的5个对象都是windo

  • Javascript之BOM(window对象)详解

    ECMAScript是JavaScript的核心,但在web使用JavaScript,那么BOM(浏览器对象模型)才是真正的核心. BOM的核心对象是window,它表示浏览器的一个实例. 在浏览器中,window对象既是JavaScript访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象.也就是说,在网页中定义的任何一个变量.对象和函数以window作为其Global对象. 1.全局作用域 既然window对象扮演着Global对象,那么所有在全局作用域中声明的对象.变

  • Java 存储模型和共享对象详解

    Java 存储模型和共享对象详解 很多程序员对一个共享变量初始化要注意可见性和安全发布(安全地构建一个对象,并其他线程能正确访问)等问题不是很理解,认为Java是一个屏蔽内存细节的平台,连对象回收都不需要关心,因此谈到可见性和安全发布大多不知所云.其实关键在于对Java存储模型,可见性和安全发布的问题是起源于Java的存储结构. Java存储模型原理 有很多书和文章都讲解过Java存储模型,其中一个图很清晰地说明了其存储结构: 由上图可知, jvm系统中存在一个主内存(Main Memory或J

  • Java编程swing组件JLabel详解以及使用示例

    JLabel 对象可以显示文本.图像或同时显示二者.可以通过设置垂直和水平对齐方式,指定标签显示区中标签内容在何处对齐.默认情况下,标签在其显示区内垂直居中对齐.默认情况下,只显示文本的标签是开始边对齐:而只显示图像的标签则水平居中对齐. 还可以指定文本相对于图像的位置.默认情况下,文本位于图像的结尾边上,文本和图像都垂直对齐. 构造方法介绍: JLabel() 创建无图像并且其标题为空字符串的 JLabel. JLabel(Icon image) 创建具有指定图像的 JLabel 实例. JL

  • Java编程复用类代码详解

    本文研究的主要是Java编程中的复用类,那么到底复用类是什么东西,又有什么用法,下面具体介绍. 看了老罗罗升阳的专访,情不自禁地佩服,很年轻,我之前以为和罗永浩一个级别的年龄,也是见过的不是初高中编程的一位大牛之一,专访之后,发现老罗也是一步一个脚印的人.别说什么难做,做不了,你根本就没去尝试,也没有去坚持. If you can't fly then run,if you can't run then walk, if you can't walk then crawl,but whateve

  • Python编程应用设计原则详解

    目录 1.单一职责原则 SRP 2.开闭原则 OCP 3.里氏替换原则 (LSP) 4.接口隔离原则 (ISP) 5.依赖反转原则 (DIP) 最后的话 写出能用的代码很简单,写出好用的代码很难. 好用的代码,也都会遵循一此原则,这就是设计原则,它们分别是: 单一职责原则 (SRP) 开闭原则 (OCP) 里氏替换原则 (LSP) 接口隔离原则 (ISP) 依赖倒置原则 (DIP) 提取这五种原则的首字母缩写词,就是 SOLID 原则.下面分别进行介绍,并展示如何在 Python 中应用. 1.

  • Python面向对象编程repr方法示例详解

    目录 为什么要讲 __repr__ 重写 __repr__ 方法 str() 和 repr() 的区别 为什么要讲 __repr__ 在 Python 中,直接 print 一个实例对象,默认是输出这个对象由哪个类创建的对象,以及在内存中的地址(十六进制表示) 假设在开发调试过程中,希望使用 print 实例对象时,输出自定义内容,就可以用 __repr__ 方法了 或者通过 repr() 调用对象也会返回 __repr__ 方法返回的值 是不是似曾相识....没错..和 __str__ 一样的

随机推荐