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; }
🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸