初识类(class&struct)及C/C++封装的差异
初识类(class&struct)
面向对象三大特性:封装、继承和多态。其中不得不谈的就是类,通过类创建一个对象的过程叫实例化,实例化后使用对象可以调用类成员函数和成员变量,其中类成员函数称为行为,类成员变量称为属性。类和对象的关系:类是对象的抽象,对象是类的实例。
struct Person{
void setAge(){
age = ;
cout << "age:" << age << endl;
}
int age;
}; class Animal{
public: void setAge(){
age = ;
cout << "animal age:" << age << endl;
}
int age;
};
从上面的代码中可以看出,在类内或者struct中,可以在定义成员属性前使用它。
其实C++中struct和class中,看起来都是一样的,calss有访问权限,struct同样有三种权限,最本质区别在于:1)默认的继承访问权限。struct是public的,class是private的;2)struct作为数据结构的实现体,它默认的数据访问控制是public的,而class作为对象的实现体,它默认的成员变量访问控制是private的;3)(这个不是最本质的区别,平时提到的也比较少)“class”这个关键字还用于定义模板参 数,就像“typename”。但关键字“struct”不用于定义模板参数。
当你觉得你要做的更像是一种数据结构的话,那么用struct,如果你要做的更像是一种对象的话,那么用class。还要强调一点的就是,对于访问控制,应该在程序里明确的指出,而不是依靠默认,这是一个良好的习惯,也让你的代码更具可读性。
C/C++封装差异
由于C语言struct不能写函数,因此封装时将属性和行为(姑且这样叫,和C++统一)分开处理,另外函数参数的类型检测不严格,就会导致一些意想不到的情况;C++的参数类型检测严格,且会将属性和行为定义在一起,表示具体的事物。
类成员权限
类的成员有三个权限:公有权限(public),私有权限(private),保护权限(protected)。
私有权限:私有成员在类内部可以访问,类外不可访问,一般推荐将成员变量设置为私有成员;
公有权限:类内类外都可以进行访问;
保护权限:类内和当前类的子类可以访问,类外不可访问。
下面的例子,可以根据三个权限,对对象的属性和行为实现只读,只写等功能。
#include <iostream>
#include <string>
using namespace std; class Animal{
public:
//写入myLOve
void setLove(string love){
myLove = love;
}
//读取年龄
int readAge(){
return age;
} //写入名字
void setName(string name){
myName = name;
}
//读取名字
string readName(){
return myName;
} private:
string myLove; //只写
string myName; //读写
int age = ; //只读
}; void test(){
Animal animal; int age = animal.readAge();
animal.setName("傻猫");
string name = animal.readName();
animal.setLove("小二黑");
cout << name << "今年" << age << "岁" << endl;
} int main(){ test();
system("pause");
return ;
}
初识类(class&struct)及C/C++封装的差异的更多相关文章
- Python初识类与对象
Python初识类与对象 类与对象 世界观角度分析类与对象 类是一个抽象的概念,而对象是一个实体的存在,对象由类创造而出,每个对象之间互相独立互不影响,一个对象可以同时拥有多个类的方法,实例化就是通过 ...
- 《Java从入门到失业》第四章:类和对象(4.1):初识类和对象
4类和对象 在第一章曾经简单介绍过,在面向对象的世界里,一切事物皆对象,当解决一个问题的时候,我们先会考虑这个问题会涉及到哪些事物,然后把事物抽象成类,当时还画了一张图如下: 从本章开始,我们一点一点 ...
- 第8章 Java类的三大特性之一:封装
1.什么是封装 1.1概念 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问.主要是类的属性 1.2好处 a.只能通过规定的方法访问数据b.隐藏类 ...
- !带有指针的类和struct赋值的本质 - host to device
//这个变量必须在while循环外面 //原因是当将loadModels[modelNum].g_3DModel[0]赋值给新建类后 //里面的数值拷贝过去了,而里头的指针只给了地址 //所以如果这个 ...
- 导入导出封装的工具类 (一) 利用POI封装
对于导入导出各个项目中差点儿都会用到,记得在高校平台中封装过导入导出这部分今天看了看是利用JXL封装的而经理说让我用POI写写导出,这两个导入导出框架是眼下比較流程和经常使用的框架,有必要都了解一下. ...
- day 23 对象的名称空间 类,对象属性和方法 封装 接口提供
一.对象的特有名称空间 # 对象独有的名称空间:在产生对象时就赋初值 '''class ted: def func(): 当func里不存在参数时,调用时不需要给值 print('hah')ted.f ...
- python学习之老男孩python全栈第九期_day025知识点总结——接口类、抽象类、多态、封装
一. 接口类 java:面向对象编程 设计模式 -- 接口类 接口类:python原生不支持 抽象类:python 原生支持的 from abc import abstractclassmethod, ...
- python基础-第七篇-7.1初识类和对象
创建类和对象 刚开始我们接触得多的编程方式为面向过程编程,这种方式就是根据业务逻辑从上往下垒代码,后来又出现了函数式编程,就是为了提高代码的重用性,减轻程序猿的工作量--而今天我们即将学的 面向对象编 ...
- Python基础-面向对象初识--类
什么是类 具有相似功能和属性的一类实物 什么是对象 类的具体体现,具体到一个 面向对象的优势 1.类是一组相似功能的集合,使组织结构更加清晰和规范化 2.研究面向对象要有上帝的思维,用面向对象设计程序 ...
随机推荐
- VS 解决方案 Xamarin 配置
需要额外安装 Mono 程序 工具->Xamarin->Android -> SDK路径 要和 你配置的ANDROID_SDK_ROOT 的路径一至如果没有 ANDROID_SDK ...
- BCB编写DLL终极手册
一. 编写 DLL File/New/Dll 生成 Dll 的向导,然后能够添加导出函数和导出类 导出函数:extern "C" __declspec(dllexport) Exp ...
- (34)C#异常
一.异常的层次结构 二.异常格式 异常的一般格式 try { //可能会抛出异常的代码 } catch { //发现错误后会运行这里面的代码 } finally { //写不论是否出现异常都执行的代码 ...
- jquery判断是pc端还是移动端
原文地址:https://www.cnblogs.com/mo-cha/p/6038872.html $(function(){ var system = { win: false, mac: fal ...
- tcp通信,解决断包、粘包的问题
1.TCP和UDP的区别 TCP(transport control protocol,传输控制协议)是面向连接的,面向流的,提供高可靠性服务.收发两端(客户端和服务器端)都要有一一成对的socket ...
- 【转载】一定要会用selenium的等待,三种等待方式必会
转载地址:http://blog.csdn.net/huilan_same/article/details/52544521,感谢博文,学习了 原文: 发现太多人不会用等待了,博主今天实在是忍不住要给 ...
- mui 上拉加载 实现分页加载功能
mui 上拉加载 实现分页加载功能,效果图: 分页功能(上拉加载): 1.引入需要的css.js文件 <link href="static/css/mui.css" rel= ...
- vue-router路由跳转判断用户是否存在
router.beforeEach((to, from, next) => { //console.log("to:", (to)); //console.log(" ...
- selenium基础(窗口截图)
窗口截图 目的:当脚本执行出错时对当前窗口进行截图 方法:get_screenshot_as_file() #打开百度首页,搜索“selenium",完成后进行截图,并将结果保存至D:/te ...
- 13-5-let和()的作用域
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...