浅谈c++中class与struct的区别

本文主要讨论class与struct的区别。为什么是区别而不是共同点呢?因为在绝大部分情况下,class和struct其实是可以互相替换的,

那么区别到底有哪些呢,我总结了一下大概有如下3点:

1、成员的默认访问权限不同。如果我们使用struct关键字,则定义在第一个访问说明符之前的成员是public的;相反,如果我们使用class关键字,则这些成员是private的。

class A   //class
{
    int x;
public:
    A():x(0){}
};
struct B<span style="white-space:pre">	</span>//struct
{
    int x;
public:
    B():x(0){}
};
int main()
{
    A a;
    cout << a.x << endl;//class不可以
    B b;
    cout << b.x << endl;//struct可以
}

2、默认的继承保护级别不同。默认情况下,使用class关键字定义的派生类是私有继承的;而使用struct关键字定义的派生类是公有继承的。

class A
{
public:
    int x;
    A():x(0){}
};
class SonA:A{};
struct B
{
public:
    int x;
    B():x(0){}
};
struct SonB:B{};
int main()
{
    SonA a;
    cout << a.x << endl;//class不可以
    SonB b;
    cout << b.x << endl;//struct可以
}

3、在定义模板的时候只能使用class而不能用struct

template<class T> class A //可以
template<struct T> class B//不可以

除此之外,class与struct基本上用法就是相同的。在C++中,class的特性如成员函数、继承、虚函数等也能在struct上实现。

与此同时,可以参考《Inside The C++ Object Model》P15的内容和《C++primer》P546 所阐述的“ 人们常常有一种错觉,认为在使用struct关键字和class关键字定义的类之间还有更深层次的差别。事实上,唯一的差别就是默认成员访问说明符及默认派生访问说明符;除此之外,再无其他不同之处。”

时间: 2024-08-04 00:25:30

浅谈c++中class与struct的区别的相关文章

浅谈C#中堆和栈的区别(附上图解)

线程堆栈:简称栈 Stack 托管堆: 简称堆 Heap 使用.Net框架开发程序的时候,我们无需关心内存分配问题,因为有GC这个大管家给我们料理一切.如果我们写出如下两段代码: 代码段1: public int AddFive(int pValue) { int result; result = pValue + 5; return result; } 代码段2: public class MyInt { public int MyValue; } public MyInt AddFive(i

转 浅谈C++中指针和引用的区别

浅谈C++中指针和引用的区别 浅谈C++中指针和引用的区别 指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元:而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已.如: int a=1;int *p=&a; int a=1;int &b=a; 上面定义了一个整形变量和一个指针变量p,该指针变量指向a

浅谈Java中set.map.List的区别

就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型. JAVA集合主要分为三种类型: Set(集) List(列表) Map(映射) Collection 接口 :Collection是最基本的集合接口,声明了适用

浅谈HTTP中Get与Post的区别_转

可参考:HTTP请求中POST与GET的区别 Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作.到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息. 1.根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的

浅谈MFC中BitBlt与StretchDIBits的区别

一.基础知识 1.BitBlt BitBlt 用于从原设备中复制位图到目标设备,语法格式如下: BOOL BitBlt( HDC hdcDest, // handle to destination DC int nXDest, // 目标矩形区域的左上角x轴坐标点. int nYDest, // 目标矩形区域的左上角y轴坐标点. int nWidth, // 在目标设备中绘制位图的宽度. int nHeight, // 在目标设备中绘制位图的高度. HDC hdcSrc, // 源设备上下文对象

浅谈JavaScript中typeof与instanceof的区别

  首先,我们从其常规定义入手:       instanceof 运算符可以用来判断某个构造函数的 prototype 属性是否存在另外一个要检测对象的原型链上.(需要注意的一点是:prototype(原型链)的属性值有可能会改变).     typeof操作符返回一个字符串,表示未经求值的操作数(unevaluated operand)的类型. 此处引入topeof的一些特别之处,以便在区分用instanceof 还是typeof是做出判断: 注意:在通过typeof处理"其他任何对象&qu

浅谈HTTP中Get与Post的区别

一般在浏览器中输入网址访问资源都是通过get方式:在Form提交中,可以通过method指定提交方式为get或者post,默认为get提交. Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作.到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而P

浅谈C++中指针和引用的区别

指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元:而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已.如: int a=1;int *p=&a; int a=1;int &b=a; 上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址. 而下面2句定义了一

转 浅谈HTTP中Get与Post的区别

原文:http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作.到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于