C语言类的基本语法详解

 更新时间:2022年01月18日 10:22:31   作者:Jiawen_captial  
大家好,本篇文章主要讲的是C语言类的基本语法详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览

1、由C语言的结构体进入到C++中的类

我们在C语言中当需要定义多个变量的数据集合时,第一时间会想到使用结构体来进行定义,例如我们定义一个学生变量,包含姓名、年龄、性别等信息,代码示例如下:

struct Student{
	char name[12];
	int age;
	char sex[4];
};

但是到了C++用,由于C++面向对象的语法特性,给struct关键字进行了升级,不仅仅可以在struct中定义变量,还可以定义函数,也由此可利用struct来定义一个学生类。代码示例如下:

struct Student{
	char name[12];
	int age;
	char sex[4];
	void show()
	{
		cout<<"姓名:"<<name<<endl;
		cout<<"年龄:"<<age<<endl;
		cout<<"性别:"<<sex<<endl;
	}
};

如上所示在C++中利用struct关键字定义了一个学生类,因为C++是兼容C的,所以该类在使用时,可以当作Student结构体来使用,也可以当作Student类来使用,(一定是在C++中!!!)两种使用如下:

//作Student结构体来使用
struct Student strs;
//作Student类来使用
Student clas;

2、C++中如何定义类?

C++中定义类的语法格式为class 类名;下面直接上代码示例:

class className
{
 // 类体:由成员函数和成员变量组成
 
}; // 一定要注意后面的分号

class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号。
类中的元素称为类的成员:类中的数据称为类的属性或者成员变量; 类中的函数称为类的方法或者成员函数。

3、C++中实例化一个对象

C++中对象的实例化可以理解成有一个类模具,根据这个类模具制造出来了许多与类中特性相同的产品。利用学生类实例学生对象,示例如下:

Student s1;
Student s2;
Student s3;
//s1、s2、s3这些都是类的实例化对象,一个类可以实例化无限个对象
//并且这些对象都是不相关的。

4、C++类的访问限定及其封装 C++中的访问限定符

C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。

C++中的访问限定符有public、private、protected
1、public修饰的成员在类外可以直接被访问
2、protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
3、访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
4、class的默认访问权限为private,struct为public(因为struct要兼容C)

封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。(可以理解为被封装起来的数据只能在类中直接访问,在类外如果需要访问时,需要借助类中已经写好的函数来进行操作)对上面的学生类进行封装,代码示例如下:

class Student{
private:
	char name[12];
	int age;
	char sex[4];
public:
	void show()
	{
		cout<<"姓名:"<<name<<endl;
		cout<<"年龄:"<<age<<endl;
		cout<<"性别:"<<sex<<endl;
	}
};

5、C++中类的作用域

类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员,需要使用 :: 作用域解析符指明成员属于哪个类域。如果要在类外实现类中声明的方法,要先进行::的操作,声明属于哪一个类。代码示例如下:

class Student{
private:
	char name[12];
	int age;
	char sex[4];
public:
	void show();
};

void Student:: show
{
		cout<<"姓名:"<<name<<endl;
		cout<<"年龄:"<<age<<endl;
		cout<<"性别:"<<sex<<endl;
}

6、成员变量和方法在类中是如何存储的?

先来看一段代码:

class Student {
private:
	char name[12];
	int age;
	char sex[4];
public:
	void show();
};
int main()
{

	Student s1;
	cout<<sizeof(s1)<<endl;
	return 0;
}
结果如图所示:

在这里插入图片描述

为什么会是二十哪?show函数的存储不在类中吗?
正是如此!一个类的大小,实际就是该类中”成员变量”之和,当然也要进行内存对齐,注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类。而类中的方法都被放到类外的同一块空间,这样做是避免在实例化对象的时候,放在方法的重复定义开辟不必要的内存空间,造成空间浪费。

总结

到此这篇关于C语言类的基本语法详解的文章就介绍到这了,更多相关C语言类的语法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python与C++ 遍历文件夹下的所有图片实现代码

    Python与C++ 遍历文件夹下的所有图片实现代码

    这篇文章主要介绍了 Python与C++ 遍历文件夹下的所有图片实现代码的相关资料,需要的朋友可以参考下
    2017-06-06
  • 剑指offer之C++语言实现链表(两种删除节点方式)

    剑指offer之C++语言实现链表(两种删除节点方式)

    今天小编就为大家分享一篇关于剑指offer之C++语言实现链表(两种删除节点方式),小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • c语言函数如何求两个数的最大值

    c语言函数如何求两个数的最大值

    这篇文章主要介绍了c语言函数如何求两个数的最大值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • OpenCV图像几何变换之透视变换

    OpenCV图像几何变换之透视变换

    这篇文章主要为大家详细介绍了OpenCV图像几何变换之透视变换,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • c++如何将一个char转化为string

    c++如何将一个char转化为string

    这篇文章主要介绍了c++如何将一个char转化为string问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • json error: Use of overloaded operator [] is ambiguous错误的解决方法

    json error: Use of overloaded operator [] is ambiguous错误的解决方

    今天小编就为大家分享一篇关于json error: Use of overloaded operator [] is ambiguous错误的解决方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • 详解如何将c语言文件打包成exe可执行程序

    详解如何将c语言文件打包成exe可执行程序

    这篇文章主要介绍了详解如何将c语言文件打包成exe可执行程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • C++ 虚函数专题

    C++ 虚函数专题

    这篇文章主要介绍了C++中虚函数的知识点,文中配合代码讲解非常细致,供大家参考和学习,感兴趣的朋友可以了解下
    2020-06-06
  • Qt实现自定义日志类的示例代码

    Qt实现自定义日志类的示例代码

    这篇文章主要为大家详细介绍了使用 qInstallMessageHandler() 实现一个简单的日志工具,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下
    2023-12-12
  • Qt超时锁屏的实现示例

    Qt超时锁屏的实现示例

    本文主要介绍了Qt超时锁屏的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01

最新评论