C++中声明类的class与声明结构体的struct关键字详解

所属分类: 软件编程 / C 语言 阅读数: 81
收藏 0 赞 0 分享

class
class 关键字声明类类型或定义类类型的对象。
语法

   [template-spec]
    class [ms-decl-spec] [tag [: base-list ]]
{
  member-list
} [declarators];
[ class ] tag declarators;

参数
template-spec
可选模板说明。
ms-decl-spec
可选存储类说明有关更多信息
tag
给定于类的类型名称。在类范围内的标记成为了保留字。标志是可选项。如果省略,定义匿名类。
base-list
此类派生其成员的类或结构的可选列表。
member-list
类成员列表。
declarators
指定类类型一个或多个实例名称的声明符列表。如果类的所有数据成员是 public,声明符可以包含初始值设定项列表。

使用举例

// class.cpp
// compile with: /EHsc
// Example of the class keyword
// Exhibits polymorphism/virtual functions.

#include <iostream>
#include <string>
#define TRUE = 1
using namespace std;

class dog
{
public:
  dog()
  {
   _legs = 4;
   _bark = true;
  }

  void setDogSize(string dogSize)
  {
   _dogSize = dogSize;
  }
  virtual void setEars(string type)   // virtual function
  {
   _earType = type;
  }

private:
  string _dogSize, _earType;
  int _legs;
  bool _bark;

};

class breed : public dog
{
public:
  breed( string color, string size)
  {
   _color = color;
   setDogSize(size);
  }

  string getColor()
  {
   return _color;
  }

  // virtual function redefined
  void setEars(string length, string type)
  {
   _earLength = length;
   _earType = type;
  }

protected:
  string _color, _earLength, _earType;
};

int main()
{
  dog mongrel;
  breed labrador("yellow", "large");
  mongrel.setEars("pointy");
  labrador.setEars("long", "floppy");
  cout << "Cody is a " << labrador.getColor() << " labrador" << endl;
}


struct
struct 关键字定义结构类型和/或结构类型的变量。

[template-spec] struct[ms-decl-spec] [tag [: base-list ]]
{ 
  member-list 
} [declarators];
[struct] tag declarators;

参数
与class的参数相同,可以参照上面的。
备注
结构类型是用户定义的复合类型。 它由可具有不同类型的字段或成员构成。
在 C++ 中,结构与类相同,只不过其成员默认为 public。
使用结构
在 C 中,你必须显式使用 struct 关键字来声明结构。 在 C++ 中,你不需要在定义该类型之后使用 struct 关键字。
可以选择在定义结构类型时,通过在右大括号和分号之间放置一个或多个逗号分隔的变量名称来声明变量。
可以初始化结构变量。 每个变量的初始化必须括在大括号中。
有关相关信息,请参阅 class、union 和 enum。
示例

 #include <iostream>
using namespace std;

struct PERSON {  // Declare PERSON struct type
  int age;  // Declare member types
  long ss;
  float weight;
  char name[25];
} family_member;  // Define object of type PERSON

struct CELL {  // Declare CELL bit field
  unsigned short character : 8; // 00000000 ????????
  unsigned short foreground : 3; // 00000??? 00000000
  unsigned short intensity : 1; // 0000?000 00000000
  unsigned short background : 3; // 0???0000 00000000
  unsigned short blink   : 1; // ?0000000 00000000
} screen[25][80];    // Array of bit fields 

int main() {
  struct PERSON sister;  // C style structure declaration
  PERSON brother;  // C++ style structure declaration
  sister.age = 13;  // assign values to members
  brother.age = 7;
  cout << "sister.age = " << sister.age << '\n';
  cout << "brother.age = " << brother.age << '\n';

  CELL my_cell;
  my_cell.character = 1;
  cout << "my_cell.character = " << my_cell.character;
}
// Output:
// sister.age = 13
// brother.age = 7
// my_cell.character = 1

更多精彩内容其他人还在看

用标准c++实现string与各种类型之间的转换

这个类在头文件中定义, < sstream>库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。另外,每个类都有一个对应的宽字符集版本
收藏 0 赞 0 分享

C++如何通过ostringstream实现任意类型转string

再使用整型转string的时候感觉有点棘手,因为itoa不是标准C里面的,而且即便是有itoa,其他类型转string不是很方便。后来去网上找了一下,发现有一个好方法
收藏 0 赞 0 分享

C/C++指针小结

要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区
收藏 0 赞 0 分享

C++ 类的静态成员深入解析

在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来总结静态成员变量和成员函数使用规则,再给出一个实例来加深印象
收藏 0 赞 0 分享

C++类的静态成员初始化详细讲解

通常静态数据成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域操作符来指出静态成员所属的类.但如果静态成员是整型或是枚举型const,则可以在类声明中初始化
收藏 0 赞 0 分享

C++类静态成员与类静态成员函数详解

静态成员不可在类体内进行赋值,因为它是被所有该类的对象所共享的。你在一个对象里给它赋值,其他对象里的该成员也会发生变化。为了避免混乱,所以不可在类体内进行赋值
收藏 0 赞 0 分享

C++中的friend友元函数详细解析

友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。友元函数的特点是能够访问类中的私有成员的非成员函数。友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样
收藏 0 赞 0 分享

static全局变量与普通的全局变量的区别详细解析

以下是对static全局变量与普通的全局变量的区别进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
收藏 0 赞 0 分享

C++ explicit关键字的应用方法详细讲解

C++ explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?下面就让我们一起来看看这方面的知识吧
收藏 0 赞 0 分享

教你5分钟轻松搞定内存字节对齐

随便google一下,人家就可以跟你解释的,一大堆的道理,我们没怎么多时间,讨论为何要对齐.直入主题,怎么判断内存对齐规则,sizeof的结果怎么来的,请牢记以下3条原则
收藏 0 赞 0 分享
查看更多