C++ class与struct的区别

本文探讨了C++中struct与class的区别,指出struct成员默认为public,class成员默认为private。通过示例展示了struct可以定义构造函数、函数并实现继承。此外,还提及struct在模板使用上的限制。
摘要由CSDN通过智能技术生成

在C语言中,struct是作为数据类型存在的,因此其中只能包含变量,不可以包含函数,结构相对简单。而C++采用OOP编程思想,为struct扩充了很多属性,使得C++中的struct与class非常相似,而区别主要体现在默认权限上。

先来看一个例子:

#include<iostream>
#include<string>
using namespace std;

struct Student
{
	//可以拥有构造函数(非必须)
	Student(string name, int age) :m_name(name), m_age(age) {};
	//可以拥有函数(非必须)
	void show() { cout << "name: " << m_name << ", age: " << m_age << endl; };

	string m_name;
	int m_age;
};

//可以继承
struct Super_Student :public Student
{
	Super_Student(string name, int age, float score) :Student(name, age), m_score(score) {};
	void show()
	{
		cout << "This is a Super_Student." << endl;
		//可以使用基结构体中的成员
		cout << "name: " << m_name << ", age: " << m_age << ", score: " << m_score << endl;
	}
	float m_score;
};

int main(void)
{
	Student stu1("Alice", 23);
	stu1.show();
	cout << "访问结构体成员: " << endl;
	cout << "name: " << stu1.m_name << ", age: " << stu1.m_age << endl;

	Super_Student stu2("Ben", 20, 99.9);
	stu2.show();

	return 0;
}

运行结果:

name: Alice, age: 23
访问结构体成员:
name: Alice, age: 23
This is a Super_Student.
name: Ben, age: 20, score: 99.9

在该例子中我定义了两个结构体Student和Super_Student,可以看到作为结构体的Student也可以定义构造函数和一般函数,Super_Student则体现了结构体也可以继承的特性。

struct与class的主要区别在于默认权限方面:

  1. class的成员默认权限为private,struct的成员默认权限为public。因此在主函数中可以直接通过stu1.m_name来访问到Student的成员变量。
  2. class的继承默认是private继承,struct的继承默认是公有继承。因此在Super_Student中的show()函数可以使用Student中的成员。

除此之外,在模板的使用方面:

  1. class可以作为一个关键字定义模板参数(与typename作用一样),而struct不可以
  2. class和struct都可以使用模板。比如STL中的很多容器就用到了模板结构体。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值