博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++类与对象(1) - 基本概念
阅读量:4072 次
发布时间:2019-05-25

本文共 1425 字,大约阅读时间需要 4 分钟。

目录


C++中,结构体(struct)与类(class)基本类似,除了下面的几个不同点。

1.成员默认权限不同

类的成员默认是私有的(private),而结构体的成员默认是公有的(public)

例子1会编译失败,例子2运行正常。

// 例子1#include 
class Test { int x; // x是私有的};int main(){ Test t; t.x = 20; //编译错误,因为x是私有成员 return 0;}

  下面是例子2:

// 例子2#include 
struct Test { int x; // x是公有的};int main(){ Test t; t.x = 20; return 0;}

2.派生时默认权限不同

当从一个class或者struct派生出一个结构体时, 默认的继承方式是public。而派生出一个类时,默认的继承方式是private。

例子3会编译失败,例子4运行正常。

// 例子3#include 
class Base {public: int x;}; class Derived : Base { }; // 等价于class Derived : private Base {} int main(){ Derived d; d.x = 20; //编译错误,因为是私有继承base return 0;}
// 例子4#include 
class Base {public: int x;}; struct Derived : Base { }; // 等价于struct Derived : public Base {} int main(){ Derived d; d.x = 20; //正常工作,因为是公有继承base getchar(); return 0;}

3.内存占用不同

使用sizeof计算class或struct的大小时,会有所区别:

#include 
class Outer{ public: class Inner { };};int main(){ std::cout<<"sizeof(Outer)="<
<<", sizeof(Inner)="<

运行输出:

sizeof(Outer)=1, sizeof(Inner)=1

// 保存为.cpp文件进行编译#include 
struct dummy{};int main() { std::cout<<"sizeof(dummy)="<

运行输出:

sizeof(dummy)=1

C++默认会对class/struct对象类型中,添加额外的一些信息,使得它们可以用来比较。所以size不是0。

但是,如果保存为.c文件,则结果为0。
如下所示:

#include 
struct dummy{};int main(){ struct dummy d; printf("sizeof(dummy)=%d", sizeof(d)); return 0;}

运行输出:

sizeof(dummy)=0

转载地址:http://kqeji.baihongyu.com/

你可能感兴趣的文章
Linux 下路由的设置
查看>>
CentOS/Linux 网卡设置 IP地址配置
查看>>
Python实现ping指定IP
查看>>
linux下ping命令使用详解
查看>>
html引入jquery库
查看>>
js与jq比较
查看>>
js学习一数组类型foreach方法
查看>>
js学习二函数
查看>>
js学习三-日期Date
查看>>
js学习五-JSON
查看>>
linux下安装django
查看>>
Python django报错ImportError: cannot import name find_spec
查看>>
js学习六-闭包
查看>>
Django入门
查看>>
宏内核与微内核、Linux内核与Unix内核的区别
查看>>
Django视图模板
查看>>
简述Session 、Cookie、cache 区别
查看>>
CROS实现跨域时授权问题(401错误)的解决
查看>>
Hadoop之基础篇
查看>>
【转】alpha版、beta版、rc版的意思
查看>>