栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++——类和对象1

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++——类和对象1

今天我们介绍类和对象,C++是基于对象的,所关注的是对象

一、对象

·我们可以把世间客观的事物看成一个对象;例如:人,比如我叫张三,张三就可以被看成是一个对象,张三这个人由很多的事物所组成,比如年龄,姓名等这些就是组成张三这个人的因素(也可以用其他方面定义张三比如两只眼睛一个鼻子等)这些因素可以看作是他的内部结构也叫类成员变量, 张三这个人可以做很多事情,比如送外卖、敲代码这种行为,可以看作是一种函数叫类成员函数

二、类

类(class)是对象的抽象,不占用内存空间。对象是类的具体事例,占用内存空间。类是对象的类型。翻译一下就是我们把张三这样的相同的对象规定成一个类型,他们的内部结构还有能做的事情是一样的

三、如何定义一个类

定义一个类有两种方式一种用struct 关键字 另一种用class 关键字 我们通常使用class来定义一个类

struct student 
{

};
class data 
{

};

struct和class有什么区别呢?

首先struct 不仅可以定义类也可以定义结构体,C++是包含C的所以C中的struct用法也保留了下来,并且struct定义的类的成员默认访问方式是public,而class默认为private

四、访问限定符public、protect、private

class data 
{
public:
	//可以被外部访问
private:
	//这里的不可以通过外部直接访问,但是可以通过类内的接口访问,protect功能相仿
};

五、类的作用域

struct  Student	//struct 默认访问权限是public的
{
public:
    void increat(const char* name , const char* gender , const int age)
	{
		strcpy(_name,name);
		strcpy(_gender,gender);
		_age = age;
	}
	void print();
private:

	char _name[20];
	int _age;
	char _gender[5];
};
void Student::print() //这里如果想使用print这个函数则要使用 类名加::才能够从类中获取类成员变量
{
	cout << "姓名:" << _name << endl << "性别:" << _gender << endl << "年龄:" << _age << endl;
}

print的使用要指定student这个类

六、类的实例化

用类类型创建对象的过程,称为类的实例化

1.定义一个类只是定义了一个模型,限定了其中有哪些成员,实际并没有分配空间给他存储

2.一个类可以实例化出多个对象,每个对象都会分配地址空间,存储类成员变量,类成员函数存储在公共区

3.如何实例化 类名 + 对象名;

int main() 
{
	Student jwt;
	jwt.increat("JWT", "男",21 );
	jwt.print();
	return 0;
}

七、如何计算类的大小

首先类中存放的有类成员变量和类成员函数

如果创建n个对象,则会在内存中创建n个成员变量和n个成员函数,这样则会占用大量的存储空间,所以我们将成员函数存放在公共区,对象的大小只跟成员变量有关

如何计算成员大小? 这要根据结构体对齐规则来进行计算

1. 第一个成员在与结构体偏移量为0的地址处

2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处

注意:对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。 VS中默认的对齐数为8

3. 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。

4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是 所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

 在类中没有成员变量时,编译器会自动添加一个占位字节来占位,以表示这个类的存在,同理只有一个成员函数的也如此

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/960995.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号