类与对象初识

本文介绍了C++中的类和对象的概念,包括类的引入、定义、访问限定符、类的作用域以及对象的实例化。通过示例展示了如何定义带有成员函数和私有成员变量的类,并解释了类成员的访问规则。同时,讨论了类对象的大小计算,强调成员函数不占用对象空间以及空类的大小。
摘要由CSDN通过智能技术生成

类与对象初识

1.类的引入

C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。

struct Student
{
	void SetStudentInfo(const char* name, const char* gender, int age)
	{
		strcpy(_name, name);
		strcpy(_gender, gender);
		_age = age;
	}

	void PrintStudentInfo()
	{
		cout << _name << " " << _gender << " " << _age << endl;
	}

	char _name[20];
	char _gender[3];
	int _age;
};
int main()
{
	Student s;
	s.SetStudentInfo("Peter", "男", 18);
	return 0;
}

2.类的定义

class Student
{
public:
    //称为成员函数
	void SetStudentInfo(const char* name, const char* gender, int age)
	{
		strcpy(_name, name);
		strcpy(_gender, gender);
		_age = age;
	}

	void PrintStudentInfo()
	{
		cout << _name << " " << _gender << " " << _age << endl;
	}
private:
    //成员变量或类的属性
    char _name[20];
	char _gender[3];
	int _age;
};
int main()
{
	Student s;
	//1.类成员的使用,不需要通过作用域限定符的方式使用
	//2.通过.的形式如果是指针通过->的形式
	s.SetStudentInfo("Peter", "男", 18);
	return 0;
}

3.访问限定符

//访问限定符
public//公有
protected//保护
private//私有

访问修饰符说明
1.访问权限修饰符只限制成员在类外的访问权限,在类内部成员之后可以相互访问
2.不受访问修饰符的限制
3.访问修饰符的作用域:从修饰符开始,到下一个修饰符结束
4. public修饰的成员在类外可以直接被访问, protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
C++和class的区别
区别是struct的成员默认访问方式是public,class是struct的成员默认访问方式
是private。
例如下面程序

#include<iostream>
using namespace std;
struct A
{
	int _ra;
};
class B
{
	int _rb;
};
void test()
{
	A a;
	a._ra;//在结构体中访问方式为public,可以访问_ra
	B b;
	b._rb;//在类中默认为访问方式private,不可以访问_rb
}
int main()
{
	test();
	return 0;
}

在这里插入图片描述

4.类的作用域

类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员,需要使用 :: 作用域解析符指明成员属于哪个类域。

class Person
{
public:
 void PrintPersonInfo();
private:
 char _name[20];
 char _gender[3];
 int _age;
};
//成员函数的类外定义
// 这里需要指定PrintPersonInfo是属于Person这个类域,通过作用域::类外定义
void Person::PrintPersonInfo()
{
 cout<<_name<<" "_gender<<" "<<_age<<endl; 
}

5.类的实例化

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

  1. 类只是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它
  2. 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
  3. 做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什
    么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间。
class A
{
public:
	int _pa;
};
void test()
{
	//定义一个类类型的变量称为类的实例化
	//实例化的变量称为类的对象
	A oa;//oa是A的实例化对象
}

6.计算类对象的大小

#include<iostream>
using namespace std;
class A
{
public:
	int a;
};
class B
{
//成员函数不占对象的空间
public:
	int fun1(int a, int b)
	{
		return a + b;
	}
public:
	int _a;
};
class C
{
public:
	int fun1(int a, int b)
	{
		return a + b;
	}
	//C中不含成员变量,大小类似于空类的大小
};
class D{};
void test()
{
	cout << sizeof(A) << endl;
	cout << sizeof(B) << endl;
	cout << sizeof(C) << endl;
	cout << sizeof(D) << endl;
}
int main()
{
	test();
	return 0;
}

在这里插入图片描述

需要注意两点:
1.类中的成员函数不占对象的空间
2.空类也占一个字节的大小

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值