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. 【NOIP2018pj】题解

    [NOIP2018pj]题解 \(T1\) 题面 洛谷 题解 好像并没有什么好说的... #include <iostream> #include <cstdio> #incl ...

  2. AngularJS中Directive指令系列 - 基本用法

    参考: https://docs.angularjs.org/api/ng/service/$compile http://www.zouyesheng.com/angular.html Direct ...

  3. Django模型层:单表操作

    一 ORM简介 查询数据层次图解:如果操作mysql,ORM是在pymysq之上又进行了一层封装

  4. 前端--javaScript之简单介绍

    一.javaScript(以下简称js)的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.(客户端 ...

  5. zigbee路由(报文实例)

    4855 广播  routeRequestId = 6, pathCost = 0 radius=1E 62BB 继续广播 routeRequestId = 6, pathCost = 1 radiu ...

  6. Java 分割、合并byte数组

    场景:上传文件较大,把存放文件内容byte数组拆分成小的.下载的时候按照顺序合并. 起初觉得挺麻烦的,写完觉得挺简单. 切割: /** * 拆分byte数组 * * @param bytes * 要拆 ...

  7. dubbo 微服务框架

    dubbo 注解配置: @Service //Service注解暴露服务 @Configuration // javaconfig形式配置公共模块 @DubboComponentScan // 指定d ...

  8. 三点须知:当我们在开发过程中需要用到分布式缓存Redis的时候

    当我们在开发过程中需要用到分布式缓存Redis的时候,我们首先要明白缓存在系统中用来做什么? 1. 少量数据存储,高速读写访问.通过数据全部in-momery 的方式来保证高速访问,同时提供数据落地的 ...

  9. js操作对象属性值为字符串

    今天在项目开发中遇到一个没遇到过的问题,这个问题是需要对比两个对象a和b,a是一个只有一个属性的对象,b是一个含有多个属性对象,如果b中包含和a一模一样的属性名和值,则把这个一样的属性和值从b中删除了 ...

  10. php异步学习(2)

    PHP开启异步多线程执行脚本   场景要求 客户端调用服务器a.php接口,需要执行一个长达5s-20s不等的耗资源操作,但是客户端响应请求时间为5秒(微信公众账号服务器请求响应超时时间),5s以上无 ...