0.目录

1.默认访问级别

2.默认继承方式

3.小结

1.默认访问级别

  • 在用struct定义类时,所有成员的默认访问级别为public
  • 在用class定义类时,所有成员的默认访问级别为private

2.默认继承方式

2.1 分别独立继承

  • struct继承struct时,默认继承方式为public
  • class继承class时,默认继承方式为private

2.2 struct继承class

struct继承class时,默认继承方式为public。

示例代码:

#include <stdio.h>

class Biology
{
public:
int i;
int get_i() { return i; }
}; struct Animal : Biology
{
int j;
int get_j() { return j; }
}; int main()
{
Animal animal;
animal.i = 1;
animal.j = 2; printf("i = %d\n", animal.get_i());
printf("j = %d\n", animal.get_j()); return 0;
}

运行结果为:

[root@bogon Desktop]# g++ test.cpp
[root@bogon Desktop]# ./a.out
i = 1
j = 2

2.3 class继承struct

class继承struct时,默认继承方式为private。

示例代码:

#include <stdio.h>

struct Biology
{
int i;
int get_i() { return i; }
}; class Animal : Biology
{
public:
int j;
int get_j() { return j; }
}; int main()
{
Animal animal;
animal.i = 1;
animal.j = 2; printf("i = %d\n", animal.get_i());
printf("j = %d\n", animal.get_j()); return 0;
}

运行结果为:

[root@bogon Desktop]# g++ test.cpp
test.cpp: In function ‘int main()’:
test.cpp:5: error: ‘int Biology::i’ is inaccessible
test.cpp:19: error: within this context
test.cpp:6: error: ‘int Biology::get_i()’ is inaccessible
test.cpp:22: error: within this context
test.cpp:22: error: ‘Biology’ is not an accessible base of ‘Animal’

改成public继承后:

#include <stdio.h>

struct Biology
{
int i;
int get_i() { return i; }
}; class Animal : public Biology
{
public:
int j;
int get_j() { return j; }
}; int main()
{
Animal animal;
animal.i = 1;
animal.j = 2; printf("i = %d\n", animal.get_i());
printf("j = %d\n", animal.get_j()); return 0;
}

运行结果为:

[root@bogon Desktop]# g++ test.cpp
[root@bogon Desktop]# ./a.out
i = 1
j = 2

3.小结

  • 在用struct定义类时,所有成员的默认访问级别为public
  • 在用class定义类时,所有成员的默认访问级别为private
  • 默认是public继承还是private继承,取决于子类而不是基类
    1. 子类是struct,默认继承方式为public
    2. 子类是class,默认继承方式为private

C++解析(10):struct和class的区别的更多相关文章

  1. C#中struct和class的区别详解

    本文详细分析了C#中struct和class的区别,对于C#初学者来说是有必要加以了解并掌握的. 简单来说,struct是值类型,创建一个struct类型的实例被分配在栈上.class是引用类型,创建 ...

  2. C#中struct和class的区别详解 (转载)

    本文详细分析了C#中struct和class的区别,对于C#初学者来说是有必要加以了解并掌握的. 简单来说,struct是值类型,创建一个struct类型的实例被分配在栈上.class是引用类型,创建 ...

  3. struct与class的区别

    C++中的struct是对C中struct的扩充,它已经不再只是一个包含不同数据类型的数据结构,因为其扩充了太多功能.总的来说,C++中struct和class极其相似,比如,struct能包含成员函 ...

  4. C++学习基础十三——struct和class的区别

    来自:http://blog.sina.com.cn/s/blog_48f587a80100k630.html C++中的struct是对C中struct进行了扩展,它不单是一个包含不同数据类型的数据 ...

  5. JAVA Apache POI 之sax 解析10万级大数量数据

    第一步让我们来看看我们的大量数据的excel 文件 好的下面第二步看一下代码: package com.chinait.utils; /** * 写这个东西主要是最近做了一个联通的数据迁移工作,他们就 ...

  6. C#中Struct与Class的区别

    class和struct最本质的区别是class是引用类型,而struct是值类型,它们在内存中的分配情况有所区别. 什么是class? class(类)是面向对象编程的基本概念,是一种自定义数据结构 ...

  7. C#经典面试题 C# 中 Struct 与 Class 的区别,以及两者的适用场合

    在一家公司面试时,第一个问题就是问到这个 转载 文章 http://www.cnblogs.com/waitrabbit/archive/2008/05/18/1202064.html  来解释此问题 ...

  8. 在什么情况下使用struct,struct与class的区别

    Struct定义和使用 类是引用类型,是保存在托管堆中的.通过定义类,我们可以在数据的生存期上得到很高的灵活性,但是也会让程序的性能有一定的损失.虽然这种损失很小,但当我们只需要定义一个很小的结构时, ...

  9. 转 class和struct最本质的区别

    class和struct最本质的区别是class是引用类型,而struct是值类型,它们在内存中的分配情况有所区别. 什么是class? class(类)是面向对象编程的基本概念,是一种自定义数据结构 ...

随机推荐

  1. MSP430的JTAG接口和BSW接口

    1.JTAG口,JTAG引脚如下定义:  单片机TCK——测试时钟输入,接仿真器7脚  单片机TDI——测试数据输入,接仿真器2脚  单片机TDO——测试数据输出,接仿真器1脚  单片机TMS——测试 ...

  2. 前端 layui

    如果想实现类似 alert这种效果又不想阻塞html运行的话,就是用layer吧! http://www.layui.com/

  3. Connect C# to MySQL

    Connect C# to MySQL using MySQL Connector/Net, Insert, Update, Select, Delete example, Backup and re ...

  4. python--自定义模块

    python模块说明:类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不 ...

  5. jmeter执行顺序及作用域规则

    1.执行顺序 配置元件 前置处理器 定时器 采样器 后置处理器 断言 监听器 备注: 服务器响应为空的话后三个不执行 作用域内存在采样器时定时器.断言.前置/后置处理器才执行 逻辑控制器和采样器按照在 ...

  6. Phaser游戏框架与HTML Dom元素之间的通信交互

    本想按照PHASER的HTML Dom元素官方实例:http://labs.phaser.io/index.html?dir=game%20objects/dom%20element/&q=  ...

  7. Siki_Unity_2-3_UGUI_Unity4.6 UI Beta版本入门学习(未学)

    Unity 2-3 UGUI Unity4.6 UI Beta版本入门学习(未学)

  8. Echarts-K线图提示框改头换面

    工作: 使用Hbuilder建web工程,加入echarts相关库,根据需要更改K线图及其的提示样式,去除默认提示,使用异步加载echarts的数据,数据格式为json. 需要注意的K线图和5日均线, ...

  9. Method 'ExecuteAsync' in type 'System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy' does not have an implementation

    一.错误信息 Entity Framework 6.0数据迁移:Add-Migration XXXX 命令发生错误 System.Reflection.TargetInvocationExceptio ...

  10. Python常用模块之VideoCapture

    官方网址:http://videocapture.sourceforge.net/   功能介绍: VideoCapture是Win32版Python的一个扩展,可以访问视频采集设备(如USB摄像头) ...