IE盒子

搜索
查看: 82|回复: 0

C++编程基础知识--类的定义及属性

[复制链接]

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2023-4-9 21:33:36 | 显示全部楼层 |阅读模式
一、基本概念

class  类名{
访问范围说明符:
    成员变量1
    成员函数声明1
};
1、“访问范围说明符”一共有三种,分别是 public、private 和 protected
2、类的成员函数(除静态成员函数)之间可以互相调用。类的成员函数可以重载,也可以设定参数的默认值
3、成员变量就代表对象的“属性”,成员函数就代表对象的“方法”。成员变量和成员函数出现的先后次序没有规定
二、访问类的成员

对象名.成员名方法,还可以用指针->成员名的方式来访问对象的成员
1、private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问.
2、protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问
3、public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问
关于类成员函数中访问同类对象的私有成员,主要包含以下几种场景
a. 在C++的类的成员函数中,允许直接访问该类的对象的私有成员变量。
b. 在类的成员函数中可以访问同类型实例的私有变量。
c. 拷贝构造函数里,可以直接访问另外一个同类对象(引用)的私有成员。
d. 类的成员函数可以直接访问作为其参数的同类型对象的私有成员
三、抽象类

纯虚函数
1、在基类中仅仅给出声明,不对虚函数实现定义,而是在派生类中实现。这个虚函数称为纯虚函数
2、普通函数如果仅仅给出它的声明而没有实现它的函数体,这是编译不过的。纯虚函数没有函数体
抽象类概念
含有纯虚函数的类被称为抽象类。抽象类只能作为派生类的基类,不能定义对象,但可以定义指针。在派生类实现该纯虚函数后,定义抽象类对象的指针,并指向或引用子类对象。
接口和抽象类的区别
1)C++中我们一般说的接口,表示对外提供的方法,提供给外部调用。是沟通外部跟内部的桥梁。也是以类的形式提供的,但一般该类只具有成员函数,不具有数据成员;
2)抽象类可以既包含数据成员又包含方法
四、类的特殊成员函数

1、C++ 类有四类特殊成员函数,它们分别是:默认构造函数、析构函数、拷贝构造函数以及拷贝赋值运算符。
2、这些类的特殊成员函数负责创建、初始化、销毁,或者拷贝类的对象
LidarParserBase() = defaulted;//默认构造函数
  ~LidarParserBase();//析构函数
  LidarParserBase(const LidarParserBase&) = delete;//拷贝构造函数
  LidarParserBase& operator=(const LidarParserBase&) = delete;//拷贝赋值运算符,禁止使用该函数五、类的静态属性

1、对象与对象之间的成员变量是相互独立的.要想共用数据,则需要使用静态成员或静态方法
2、只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间,进而可以使用静态成员变量.(因为静态成员变量在对象创建之前就已经被分配了内存空间)
3、静态成员变量虽然在类中,但它并不是随对象的建立而分配空间的,也不是随对象的撤销而释放(一般的成员在对象建立时会分配空间,在对象撤销时会释放).静态成员变量是在程序编译时分配空间,而在程序结束时释放空间
a、静态成员变量
1、静态成员变量归整个类所有
2、静态成员变量的生命不依赖于任何对象,为程序的生命周期
3、可以通过类名直接访问共有静态成员变量
4、所有对象共享类的静态成员变量
5、可以对象名访问共有静态成员变量
6、静态成员变量需要在类外单独分配空间
7、静态成员变量在程序内部位于全局数据区
8、初始化静态成员变量要在类的外面进行.初始化的格式如下:数据类型 类名::静态成员变量名 = 初值;
9、静态成员变量需要初始化,在类中仅仅是声明,没有定义,所以要在类的外面定义,实际上是给静态成员变量分配内存
b、静态成员函数
1、静态成员函数的类的一个特殊成员函数
2、静态成员函数归整个类所有,没有this指针
3、静态成员函数只能直接访问静态成员变量和静态成员函数
4、可以通过类名直接访问类的共有静态成员函数
5、可以通过对象名访问类的共有静态成员函数
6、定义静态成员函数,直接使用static关键字修饰即可
六、类的继承属性

1、使用private继承,父类的所有方法在子类中变为private;
2、使用protected继承,父类的protected和public方法在子类中变为protected,private方法不变;
3、使用public继承,父类中的方法属性不发生改变;
基类与子类的调用构造函数与析构函数的顺序:
子类对象创建时先调用父类构造函数然后在调用子类构造函数;
子类对象析构时先调用子类析构函数然后在调用父类析造函数
上行转换和下行转换:
上行转换:子类的(指针和引用)转换为基类的(指针和引用),可隐式转换
下行转换:基类指针转成子类指针,只能强制转换
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表