初识类(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++封装的差异的更多相关文章

  1. Python初识类与对象

    Python初识类与对象 类与对象 世界观角度分析类与对象 类是一个抽象的概念,而对象是一个实体的存在,对象由类创造而出,每个对象之间互相独立互不影响,一个对象可以同时拥有多个类的方法,实例化就是通过 ...

  2. 《Java从入门到失业》第四章:类和对象(4.1):初识类和对象

    4类和对象 在第一章曾经简单介绍过,在面向对象的世界里,一切事物皆对象,当解决一个问题的时候,我们先会考虑这个问题会涉及到哪些事物,然后把事物抽象成类,当时还画了一张图如下: 从本章开始,我们一点一点 ...

  3. 第8章 Java类的三大特性之一:封装

    1.什么是封装 1.1概念 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问.主要是类的属性 1.2好处 a.只能通过规定的方法访问数据b.隐藏类 ...

  4. !带有指针的类和struct赋值的本质 - host to device

    //这个变量必须在while循环外面 //原因是当将loadModels[modelNum].g_3DModel[0]赋值给新建类后 //里面的数值拷贝过去了,而里头的指针只给了地址 //所以如果这个 ...

  5. 导入导出封装的工具类 (一) 利用POI封装

    对于导入导出各个项目中差点儿都会用到,记得在高校平台中封装过导入导出这部分今天看了看是利用JXL封装的而经理说让我用POI写写导出,这两个导入导出框架是眼下比較流程和经常使用的框架,有必要都了解一下. ...

  6. day 23 对象的名称空间 类,对象属性和方法 封装 接口提供

    一.对象的特有名称空间 # 对象独有的名称空间:在产生对象时就赋初值 '''class ted: def func(): 当func里不存在参数时,调用时不需要给值 print('hah')ted.f ...

  7. python学习之老男孩python全栈第九期_day025知识点总结——接口类、抽象类、多态、封装

    一. 接口类 java:面向对象编程 设计模式 -- 接口类 接口类:python原生不支持 抽象类:python 原生支持的 from abc import abstractclassmethod, ...

  8. python基础-第七篇-7.1初识类和对象

    创建类和对象 刚开始我们接触得多的编程方式为面向过程编程,这种方式就是根据业务逻辑从上往下垒代码,后来又出现了函数式编程,就是为了提高代码的重用性,减轻程序猿的工作量--而今天我们即将学的 面向对象编 ...

  9. Python基础-面向对象初识--类

    什么是类 具有相似功能和属性的一类实物 什么是对象 类的具体体现,具体到一个 面向对象的优势 1.类是一组相似功能的集合,使组织结构更加清晰和规范化 2.研究面向对象要有上帝的思维,用面向对象设计程序 ...

随机推荐

  1. Redis 常用的数据结构

    String 字符串 set get 使用场景: 可以用来作为缓存使用(缓存更新策略和缓存雪崩如何处理) List lpop rpop lpush rpush 使用场景: set 无序集合 使用场景: ...

  2. 使用Intellij中的Spring Initializr来快速构建Spring Boot工程

    本文将介绍嵌入的Intellij中的Spring Initializr工具,它同Web提供的创建功能一样,可以帮助我们快速的构建出一个基础的Spring Boot/Cloud工程. 1.菜单栏中选择F ...

  3. spring boot项目开发中遇到问题,持续更新

    1.JPA中EntityManager不能执行建表语句,提示要加事务Error:javax.persistence.TransactionRequiredException: Executing an ...

  4. HDU-1852-Beijing 2008-一个神奇的公式求逆元

    As we all know, the next Olympic Games will be held in Beijing in 2008. So the year 2008 seems a lit ...

  5. 3列滚动抽奖 jquery.slotmachine

    效果图: 需引入js文件: <script src="js/jquery-3.2.0.js"></script> <script src=" ...

  6. Mysql之DQL------基础查询

    #笔记内容来自于B站尚硅谷教学视频(av49181542)use myemployees; 查询表中的单个字段 SELECT last_name FROM employees; 查询表中的多个字段 # ...

  7. SpringBoot配置自定义日期参数转换器

    1.自定义参数转换器 自定义参数转换器必须实现Converter接口 /** * Created by IntelliJ IDEA. * * @Auther: ShaoHsiung * @Date: ...

  8. Jsp Layout 布局页

    本文章仅用于知识记录 /WEB-INF/tags/layout.tag <%@ tag language="java" pageEncoding="UTF-8&qu ...

  9. ThreadLocal简析

    简介 ThreadLocal在Java多线程开发中常见的一个类,在面试中也经见的问题,比如ThreadLocal的作用是什么,ThreadLocal的实现原理是什么等等.ThreadLocal是jav ...

  10. Javascript简单算法

    1.多维数组取其所有第几个值组成新数组 例如 [[, , ], [, , ], [, , ]],我要标红的值 [[1, 3, 5], [2, 2, 2], [3, 3, 3]] let t = [[1 ...