<C++>类和对象——引入

本文介绍了C++中面向对象和面向过程的概念区别,并通过实例详细讲解了如何在C++中定义类,包括类的成员变量、成员函数及访问限定符等核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 面相对象和面向过程的基本概念

C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。

C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。

我们以去酒店吃饭为例:

面向过程:点菜、洗菜、切菜、炒菜、上菜、吃菜……

面向对象:服务员、厨师、顾客……

2. 类的引入

#include<iostream>
using namespace std;
//C++兼容C struct的用法
//C++同时对struct进行了升级,把struct升级成了类
//1、结构体名称可以做类型
//2、里面可以定义函数
struct Student
{
	void Init(const char* name, const char* gender, int age)
	{
		strcpy(_name, name);
		strcpy(_gender, gender);
		_age = age;
	}

	void printf()
	{
		cout << _name << " " << _gender << " " << _age << endl;
	}
    
    //类是个整体,可以把成员变量放在类的任意地方,这里放在了最后面
	//这里不是必须加_
	//习惯加这个,用于标识成员变量
	char _name[20];
	char _gender[5];
	int _age;
};
int main()
{
	//结构体名称可以做类型,不需要一定写成struct Student s1
	Student s1;
	s1.Init("zhangsan", "nan", 18);
	s1.printf();
	return 0;
}

C++还是更喜欢用class定义类

3. 类的定义

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

class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号。

类中的元素称为类的成员:类中的数据称为类的属性或者成员变量; 类中的函数称为类的方法或者成员函数。

但是,以上的代码只将声明struct Student改为class Student会报错:

image-20220616171114340

在里面加上访问限定符public:,才能编译成功。

class Student
{
//加上public:
public:
	void Init(const char* name, const char* gender, int age)
	{
		strcpy(_name, name);
		strcpy(_gender, gender);
		_age = age;
	}

	void printf()
	{
		cout << _name << " " << _gender << " " << _age << endl;
	}
    
    char _name[20];
	char _gender[5];
	int _age;
};

int main()
{
	Student s1;
	s1.Init("zhangsan", "nan", 18);
	s1.printf();
	return 0;
}

接下来我们讲讲访问限定符

4. 类的访问限定符

【访问限定符说明】

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

⚠️注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别

【面试题】

问题:C++中struct和class的区别是什么?

解答:C++需要兼容C语言,所以C++中struct可以当成结构体去使用。另外C++中struct还可以用来定义类,和class是定义类是一样的,区别是struct的成员默认访问方式是public,class是的成员默认访问方式是private。

目前在不断更新<C++语言>的知识总结,已经更新完了<C语言><数据结构初阶>,未来我会系统地更新<Linux系统编程><Linux网络编程><数据结构进阶><MySQL数据库>等内容。想要系统学习编程的小伙伴可以关注我!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天影云光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值