C++ class类和struct结构体的区别

类(class)与结构体(struct)的区别
引入C语言的结构体,是为了保证和c程序的兼容性。
c语言中的结构体不允许定义函数成员,且没有访问控制权限的属性。
c++为结构体引入了成员函数,访问控制权限,继承,多态等面向对象特性。
c语言中,空结构体的大小为0,而C++中空结构体大小为1。
class可以使用模版,而struct不能。
**

class中成员默认是private
struct中的成员默认是public。
·class继承默认是private继承,
而struct继承默认是public继承。

例如

struct A
{
    char a;
}struct B : A
{
    char b;
}

这个时候B是public继承A的。
平时一般都这样写

struct B : public A

如果都将上面的struct改成class,那么B是private继承A的。这就是默认的继承访问权限。

class A
{
    char a;
};
 
class B : A
{
    char b;
}

平时一般都这样写

class B: private A

当然,到底默认是public继承还是private继承,取决于子类而不是基类。struct可以继承class,同样class也可以继承struct,那么默认的继承访问权限是看子类到底是用的struct还是class。
举个例子:

struct A{};
 
class B : A{}; //private继承
 
struct C : B{}; //public继承

下面例子更能说明

#include <bits/stdc++.h>

using namespace std;//结构体访问权限为public
struct person 
{
		void show();
		string name;
		int age;
};

int main () {
	person p;
	p.name = "FG";
	p.age = 666;
	cout << "name" << p.name << "age=" << p.age << endl;
	return 0;
}

struct变成class就会出错

将struct 改成class的时候,访问控制由public变为private了,那当然就不能用{}来赋初值了。加上一个public,你会发现,class也是能 用{}的,和struct毫无区别。

#include <bits/stdc++.h>

using namespace std;//结构体访问权限为public
class person 
{
	public:
		void show();
		string name;
		int age;
};

int main () {
	person p;
	p.name = "FG";
	p.age = 666;
	cout << "name=" << p.name << ' ' << "age=" << p.age << endl;
	return 0;
}

struct和class的“唯一”区别就是访问控制。很多文献上也确实只提到这一个区别。

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值