struct与class关键字在定义类中的区别

struct关键字是从C语言中继承过来的,class和struct均可定义类,用它们定义类的唯一差别在于默认的成员保护级别和默认的继承保护级别(P57--第57页,2.8--章节2.8;P485,15.2.5):

默认情况下,struct的保护级别为public,而class的保护级别为private。

下面分别就这两种情况进行举例:

例1:默认的成员保护级别

[cpp] view plaincopyprint?

  1. struct S_Base {  
  2.     int foo(int) { return 0; }  
  3.     int val;  
  4. };  
  5.   
  6. class C_Base {  
  7.     int foo(int) { return 0; }  
  8.     int val;  
  9. };  

以上两个类没有显示地使用访问标号(public, protected, private),类的成员具有默认的保护级别,类S_Base成员的保护级别为public,类C_Base成员的保护级别为private。相当于如下代码:

[cpp] view plaincopyprint?

  1. struct S_Base {  
  2. public:  
  3.     int foo(int) { return 0; }  
  4.     int val;  
  5. };  
  6.   
  7. class C_Base {  
  8. private:  
  9.     int foo(int) { return 0; }  
  10.     int val;  
  11. };  

例2:默认的继承保护级别

[cpp] view plaincopyprint?

  1. struct S_Derived : S_Base {  
  2. };  
  3.   
  4. class C_Derived : C_Base {  
  5. };  

以上两个类相当于:

[cpp] view plaincopyprint?

  1. struct S_Derived : public S_Base {  
  2. };  
  3.   
  4. class C_Derived : private C_Base {  
  5. };  

References:

《C++ Primer中文版第4版》P57, 485

时间: 2024-08-01 20:44:49

struct与class关键字在定义类中的区别的相关文章

C#中,用类定义类中的函数,不知道怎么理解?

问题描述 C#中,用类定义类中的函数,不知道怎么理解? using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Complex z1 = new Complex

在Java类中灵活使用Static关键字

用专业术语来说,只有利用了new关键字创建对象后,才会在系统中为其创建存储空间.不过在有些特殊的情况下,程序员可能希望在没有创建对象的时候就能够为某个特定的成员分配存储空间或者可以调用某个方法等等.在Java中能否实现这个需求呢? 一.不建立对象即想使用的两种实际情况. 笔者提到的这个问题是否是无中生有呢?其实不然.在实际应用程序开发中,就经常会遇到这种情况.如现在需要三个对象,分别用来计算圆的面积.圆球的体积.圆柱的体积.在这三个对象的方法中,都需要用到一个叫做圆周率的常量,而且这个圆周率是固

PHP中如何定义类及其成员属性与操作

 类的概念:类是具有相同属性和操作的一组对象的集合.它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和操作两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和操作说明两个主要部分. 1.类的定义: i. 类的关键字定义使用class 1.定义一个空类 Class Person{}; 2.定义一个有成员属性和操作的类 Class Person{ 成员属性........ 操    作........ } 3.定义一个不能被继承的类,使用final

javascript中定义类的方法详解

 这篇文章主要详细介绍了javascript中定义类的方法的相关资料,需要的朋友可以参考下     JS中定义类的方式有很多种: 1.工厂方式   代码如下: function Car(){ var ocar = new Object; ocar.color = "blue"; ocar.doors = 4; ocar.showColor = function(){ document.write(this.color) }; return ocar; } var car1 = Car(

Javascript中定义类

Javascript 本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的extend或冒号,它也没有用来支持虚函数的 virtual,不过,Javascript是一门灵活的语言,下面我们就看看没有关键字class的Javascript如何实现类定义,并创建对象. 一:定义类并创建类的实例对象 在Javascript中,我们用function来定义类,如下: function Shape() { var x = 1 ; var y = 2 ; } 你 或许会说

JavaScript中定义类的方式详解_javascript技巧

本文实例讲述了JavaScript中定义类的方式.分享给大家供大家参考,具体如下: Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的extend或冒号,它也没有用来支持虚函数的virtual,不过,Javascript是一门灵活的语言,下面我们就看看没有关键字class的Javascript如何实现类定义,并创建对象. 一.定义类并创建类的实例对象 在Javascript中,我们用function来定义类,如下: function Sh

javaScript中定义类或对象的五种方式总结_javascript技巧

第一种方式: 工厂方法 能创建并返回特定类型的对象的工厂函数(factory function). function createCar(sColor){ var oTempCar = new Object; oTempCar.color = sColor; oTempCar.showColor = function (){ alert(this.color); }; return oTempCar; } var oCar1 = createCar(); var oCar2 = createCa

php类中的$this,static,final,const,self这几个关键字使用方法_php实例

本篇文章主要分项了一下关于php类中的$this,static,final,const,self这几个关键字使用方法. $this $this表示当前实例,在类的内部方法访问未声明为const及static的属性时,使用$this->value='phpernote';的形式.常见用法如: $this->属性 $this->方法 举例如下: <?php class MyClass{ private $name; public function __construct($name){

javascript中定义类的方法汇总_基础知识

JS中定义类的方式有很多种: 1.工厂方式 复制代码 代码如下:   function Car(){    var ocar = new Object;    ocar.color = "blue";    ocar.doors = 4;    ocar.showColor = function(){     document.write(this.color)    };    return ocar;   }   var car1 = Car();   var car2 = Car