当前位置: 首页 > news >正文

c++类与对象

🐶博主主页:@ᰔᩚ. 一怀明月ꦿ 

❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章

🔥座右铭:“不要等到什么都没有了,才下定决心去做”

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀 

目录

🐰类与对象

🌸类和对象的关系:

🌸类的声明和对象的定义

🏡类的声明:

🏡对象的定义

🐰类的成员函数

🐰对象成员的访问


🐰类与对象

对象:对象就是封装了数据及在这些数据之上的操作的封装体,这个封装体有一个名字标识它,而且向外界提供一组操作
类:类是对具有相同属性和操作的一组对象的抽象描述

🌸类和对象的关系:

每一个实体都是对象。有一些对象是具有相同的结构和特性的。每个对象都属于一个特定的类型。在C++中对象的类型称为类(class )。类代表了某一批对象的共性和特征。类是对象的抽象,而对象是类的具体实例(instance)。
正如同结构体类型和结构体变量的关系一样,人们先声明一个结构体类型,然后用它去定义结构体变量。同一个结构体类型可以定义出多个不同的结构体变量。
在C然后++中也是先声明一个类类型,用它去定义若干个同类型的对象。对象就是类类型的一个变量。可以说类是对象的模板,是用来定义对象的一种抽象类型。类是抽象的,不占用内存,而对象是具体的,占用存储空间。

🌸类的声明和对象的定义

🏡类的声明:

类声明的一般形式:
class 类名
{
public:公用成员...
protected:受保护成员...
private:私有成员...
};
在声明类的一般形式中,class 是声明类的关键字,后面跟着类名。大括号里是类的成员的声明,包括数据成员和成员函数。大括号后面要有分号
成员的可访问性分为3类:
公用的(public)
受保护的(protected) 
私有的(private)
其中关键宇 public protected 和 private 称为成员访问限定符,后面加上冒号。访问限定符限定它后面的成员的访问属性,直到出现下一个访问限定符或者类声明结束。
访问属性为公用的成员既可以被本类的成员函数访问,也可以在类的作用域内被其他函数访问。
访问属性为受保护的成员可以被本类区及其派生类的成员函数访问,但不能被类外访问。
访问属性为私有的成员只能被本类成员函数访问而不能被类外访问(类的友元例外)
在声明类时,这3种访问属性的成员的声明次序是任意的,并且在一个类的声明中这3种访问属性不一定全部都出现,可能只出现两种或一种。
某个成员访问限定符在一个类的声明中也可以出现多次。无论出现几次,成员的访问属性都是从一个成员访问限定符出现开始,到另一个成员访问限定符或类声明为止如果在类声明的开始处没有写出成员访问限定符,则默认的成员访问属性是私有的。(尽量保证每一种成员访问限定符在类的声明中只出现一次)
关于3种成员访问限定符出现的顺序问题,从语法上说无论谁在前谁在后效果都是完全一样的。

🏡对象的定义

C++使用类来定义对象大体有三种方法
第一种:先声明类类型,然后再定义对象
class student
{
public:公用成员...
protected:受保护成员...
private:私有成员...
};
student stud1, stud2;   //定义了两个student类的对象stud1和stud2在C++中,在声明了类类型后,定义对象有两种形式。(1) class 类名 对象名class student stud1, stud2;(2) 类名 对象名student stud1, stud2;
(1)和(2)这两种形式完全等效,但是(1)形式更加简洁,使用最多
第二种: 在声明类类型的同时定义对象(在定义class类的时候,在定义类的末尾,定义类对象)
class student
{
public:公用成员...
protected:受保护成员...
private:私有成员...
}; stud1, stud2; //定义了两个student类的对象stud1和stud2
第三种:不出现类名,直接定义对象(在定义类的时候,在class关键字后面,没有定义类名)
class
{
public:公用成员...
protected:受保护成员...
private:私有成员...
}; stud1, stud2; //定义了两个类的对象stud1和stud2

第二种和第三种对象定义的方法不常用

特别注意:声明类时系统并不会分配内存空间,而定义对象时系统会给每个对象分配内存空间

🐰类的成员函数

返回值类型 类名::成员函数名(参数表)
{
      函数体 
 }
它与普通函数区别于:成员函数是属于某个类的,是类的一个成员。可以指定函数的访问权限(公有,私有,受保护)。在类外调用成员函数要注意它的访问属性,公有的成员函数才可以被类外任意的调用,私有的成员函数在类外是看不到的成员函数可以访问本类的任何成员,不管它的访问属性,可以访问本类的数据成员,也可以调用本类的其他成员函数。
成员函数的第一种定义方式:在类声明中只给出成员函数的原型,而将成员函数的定义放在类的外部。
#include<iostream>
using namespace std;
class Point{public:void Info();void Add();private:int x,y;
};
void Point::Info()   //在类外定义成员函数setpoint
{cin>>x>>y;
}
void Point::Add()
{cout<<x+y<<endl;
}
int main()
{Point s;s.Info();s.Add();retuen 0;
}
成员函数的第二种定义方式:将成员函数直接定义在类的内部
#include<iostream>
using namespace std;
class Point{public:void Info(){cin>>x>>y;}void Add(){cout<<x+y<<endl;}private:int x,y;
};
int main()
{Point s;s.Info();s.Add();return 0;
}
注意:
(1) 成员函数在类内定义或是在类外定义,对程序执行的效果基本一样。只是对于较长的成员函数放在类外更有利于程序的阅读。
(2)在类外定义成员函数时,必须首先在类内写出成员函数的原型声明,然后再在类外定义,这就要求类的声明必须在成员函数定义之前
(3)如果在类外有函数定义,但是在函数名前没有类名和作用域运算符进行限定,则该函数被认为是普通函数
(4) 如果成员函数的函数体很短,如只有两三行,也可以将其定义在类内
在类中的成员函数是在类内定义时,C++系统会默认该成员函数是inline成员函数,此时不必在函数定义前面加inline,如果加上也是可以的。如果成员函数定义在类外,类内只有成员函数的声明,则在成员函数的声明或成员函数定义前必须要有inline,成员函数定义前和成员函数声明前只要有一处有inline即可。

🐰对象成员的访问

(1)通过对象名和成员操作符进行访问
    对象名.成员名
s.Info();

(2)通过指向对象的指针进行访问

#include<iostream>
using namespace std;
class Point{public:void Info(){cin>>x>>y;}void Add(){cout<<x+y<<endl;}private:int x,y;
};
int main()
{Point s;Point* ps=&s;ps->Info();ps->Add();return 0;
}
(3)通过对象的引用进行访问

#include<iostream>
using namespace std;
class Point{public:void Info(){cin>>x>>y;}void Add(){cout<<x+y<<endl;}private:int x,y;
};
int main()
{Point s;Point &ps=s;ps.Info();ps.Add();return 0;
}

    🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸  

http://www.lryc.cn/news/34391.html

相关文章:

  • Java并发编程与API详解
  • 【冲刺蓝桥杯的最后30天】day5
  • 大厂与小厂招人的区别,看完多少有点不敢相信
  • 前端ES5对象特性
  • Linux入门介绍及Linux文件与目录结构
  • 超赞,用python实现流媒体服务器功能,寥寥几句搞定。
  • 冥想第七百二十一天
  • 06-Oracle表空间与用户管理
  • Mysql 索引特点
  • 读书笔记-终身学习
  • 了解栈Stack一篇文章就够了
  • CNStack 助推龙源电力扛起“双碳”大旗
  • ruoyi-vue-plus1(控制台相关的输出日志)(p6spy插件)(jackson全局配置)(StopWatch)
  • 【Mybatis】| 如何创建MyBatis的工具类
  • 【Java】DT怎么写?
  • xcode14安装swift package设置github账户token
  • css面试题1
  • Hive基础
  • 信息收集-
  • 【sdx12】sdx12获取Serial Number操作方法及源码分享Serial Number的寄存器地址
  • 23种设计模式-工厂模式(安卓应用场景介绍)
  • sheng的学习笔记-服务熔断与降级组件Hystrix
  • 简单给WordPress怎么添加自定义字段面板
  • 大数据框架之Hive:第6章 查询
  • CentOS 8搭建EMQX集群
  • 基于神经网络的自监督学习方法音频分离器(Matlab代码实现)
  • yocto 如何添加python module
  • [深入理解SSD系列综述 2.1.2] SLC、MLC、TLC、QLC、PLC NAND_固态硬盘闪存颗粒类型
  • Matlab实现FFT变换
  • JVM调优面试题——垃圾回收专题