iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++类与对象的详细说明
  • 423
分享到

C++类与对象的详细说明

2024-04-02 19:04:59 423人浏览 薄情痞子
摘要

目录类的引入类的定义1、声明和定义全部放在类体中2、声明放在头文件,定义放在源文件中类的访问限定符号及封装访问限定符封装类的实例化类对象模型this指针this指针的特性总结类的引入

类的引入

在引入类之前,先来回忆一下C语言中的结构体。结构体是一种自定义类型,可以在其中定义变量,如我们所熟悉的日期结构体:

struct Date
{
	int year;
	int month;
	int day;
};

而在c++中,结构体被升级成了类,结构体中不仅可以定义成员变量,也可以定义成员函数(成员方法):

struct Date
{
	//成员变量
	int year;
	int month;
	int day;
	//成员方法
	void print()
	{
		cout << year << "-" << month << "-" << "day" << endl;
	}
};

在C++中,更喜欢使用class来替代struct,当然它们也有所差别,在之后会说明。

类的定义

类的定义可以分为两种,即声明和定义全部放在类体中与声明与定义分离。

1、声明和定义全部放在类体中

该方式即为上一举例代码的定义方式。但要注意,如果采用这种方法定义成员函数,编译器可能会将该函数作为内联函数处理。

2、声明放在头文件,定义放在源文件中

头文件中成员函数只需要声明:

struct Date
{
	//成员变量
	int year;
	int month;
	int day;
	//成员方法
	void print();
};

在源文件中对函数进行定义:

void Date::print()
{
	cout << year << "-" << month << "-" << "day" << endl;
}

需要注意,print为类域中的函数,如果不加Date::用以指定类域,会导致定义出错。因此,使用该方式定义成员函数时,一定要注意指定类域。

类的访问限定符号及封装

访问限定符

访问限定符分为三种:

(1)public修饰的成员在类外可以直接被访问:

class Date
{
public:
	int year;
	int month;
	int day;
	void print()
	{
		cout << year << "-" << month << "-" << "day" << endl;
	}
};
int main()
{
	Date date;
	date.day = 0;
}

如上代码,在main函数中可以直接对对象中的成员变量day进行访问。

(2)protected和private修饰的成员变量在类外不能被直接访问

class Date
{
private:
	int year;
	int month;
	int day;
	void print()
	{
		cout << year << "-" << month << "-" << "day" << endl;
	}
};
int main()
{
	Date date;
	date.day = 0;
}

此时如果在main函数中对直接对象中的成员变量day进行访问,会导致错误

 (3)访问权限作用域是从该访问限定符的位置开始直到下一个访问限定符出现时为止

class Date
{
private:
	int year;
	int month;
	int day;
public:
	void print()
	{
		cout << year << "-" << month << "-" << "day" << endl;
	}
};

如上代码,成员变量均为私有的,而成员函数print为公有的。

(4)class的默认访问权限(即不写访问限定符时)为private,struct为public

封装

封装实际上是一种更好的严格管理

将数据和方法封装到类里,可以访问的定义为共有,不想给他人访问的定义为私有或保护。如此一来就做到了隐藏对象的属性和细节,仅仅对外公开接口来和对象进行交互,更加安全高效。

类的实例化

所谓类的实例化,简而言之就是用类类型创建对象的过程。

打个比方,类就好似建筑的图纸,而对象就是根据图纸造出的建筑。对象是真实存在摸得着的,只有实例化出的对象才能够实际存储数据。

类对象模型

学过C语言我们知道如何计算结构体的大小,那么在C++中,类的大小如何确定呢?

我们所不清楚的,就是类中成员函数的大小如何计算。实事上对于同一类的不同对象,处理问题的方法是相同的,如果每个对象都要保存一遍成员方法,未免有些过于浪费空间了。

因此在C++中,成员函数存放在公共代码段。计算类的大小只需要按照C语言中结构体大小的计算规则即可,不需要考虑成员函数。

注意:空类的大小为1byte,不存储有效数据,但需要占位用以表示对象存在。

this指针

class Date
{
private:
	int _year;
	int _month;
	int _day;
public:
	void init(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}
};
int main()
{
	Date date1, date2;
	date1.init(2022, 2, 14);
	date2.init(2022, 2, 15);
}

对于上述代码,有一个问题,date1与date2这两个对象分别都调用了init进行初始化,那么init函数是如何区分该为哪个对象进行初始化的呢?

C++通过引入this指针解决了这个问题。

this指针的特性

1、this指针的类型:类类型* const,存放对象的地址

2、只能在成员函数内部使用

3、this指针本质上是成员函数的形参,传参时存放在栈帧中,对象中不存储this指针

4、this指针为隐藏的形参,不需要用户传递

在上述代码实际被处理成了这样:

void init(int year, int month, int day)
{
	this->_year = year;
	this->_month = month;
	this->_day = day;
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!    

--结束END--

本文标题: C++类与对象的详细说明

本文链接: https://www.lsjlt.com/news/139563.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c语言怎么计算字符串长度
    在C语言中,可以使用内置的strlen()函数来计算字符串的长度。该函数位于string.h头文件中。以下是一个示例代码: #inc...
    99+
    2024-05-14
    c语言
  • c语言怎么判断三个数的大小
    可以通过比较三个数之间的大小关系来判断它们的大小。以下是一个示例代码: #include <stdio.h> int ...
    99+
    2024-05-14
    c语言
  • c++排序函数sort怎么使用
    在C++中,使用sort函数对容器中的元素进行排序,可以按照默认的升序排列,也可以自定义排序规则。 下面是一个简单的例子,对一个ve...
    99+
    2024-05-14
    c++
  • c++中string的compare函数怎么使用
    在C++中,可以使用string的compare函数来比较两个string对象的大小。该函数的原型如下: int compare(c...
    99+
    2024-05-14
    c++
  • c++中string的compare函数有什么用
    c++中string的compare函数用于比较两个字符串的大小关系。该函数返回一个整数值,表示两个字符串的比较结果。 具体来说,如...
    99+
    2024-05-14
    c++
  • c++中print函数的功能有哪些
    在C++中,通常使用std::cout来进行输出操作,而不是使用print函数。std::cout是C++标准库中的一个输出流对象,...
    99+
    2024-05-14
    c++
  • c语言数据结构怎么使用
    在C语言中,数据结构可以通过定义结构体来实现。以下是一些常见的数据结构的使用方法示例: 链表: #include <std...
    99+
    2024-05-14
    c语言
  • c++中print函数的用法是什么
    在C++中没有内置的print函数,但可以使用cout来输出内容到控制台。cout是C++标准库中的一个输出流对象,可以使用<...
    99+
    2024-05-14
    c++
  • c++中concept的用法是什么
    在C++20中,Concept是一种新的语言特性,用于定义类型要求和约束。Concept可以被用来约束函数模板、类模板和普通函数的参...
    99+
    2024-05-14
    c++
  • c++中concept的作用是什么
    在C++中,concept的作用是定义一种通用的约束,用于限制模板参数的类型范围。通过使用concept,可以在编译时对模板参数进行...
    99+
    2024-05-14
    c++
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作