对于struct和class的认识

之前一直以为c++中有class的原因是c中的struct不能有构造函数,析构函数,继承等功能,没想到struct也可以实现这些功能。

只不过class中默认的关键字是private,而struct中默认的关键字是public。

以一个例子来说明用struct实现类的一些功能。

eg:

#include <iostream>
using namespace std;
enum BREED {GOLDEN,CAIRN,DANDIE,SHETLAND,DOBERMAN,LAB};//BREED是一种数据类型了,其值可以是括号里的任意一个,第一个默认为0

struct Mammal
{
protected:
int itsAge;
int itsWeight;
public:
Mammal() :itsAge(2), itsWeight(5){}
~Mammal(){}
int GetAge() const { return itsAge; }
void SetAge(int age){ itsAge = age; }
int GetWeight() const { return itsWeight; }
void SetWeight(int weight){ itsWeight = weight; }

void Speak() const { cout << "\n Mammal sound! \n"; }
void Sleep() const { cout << "\n Shhh.I‘m sleeping"; }
};

struct Dog :public Mammal
{
private:
BREED itsBreed;
public:
Dog() :itsBreed(GOLDEN){}
~Dog(){}
BREED getBreed() const { return itsBreed; }
void SetBreed(BREED breed){ itsBreed = breed; }
void WagTail() const { cout << "Tail wagging...\n"; }
void BegForFood() const { cout << "Begging for food...\n"; }
};

int main()
{
Dog fido;
fido.Speak();
fido.WagTail();
cout << "Fido is " << fido.GetAge() << "years old \n";
return 0;
}

输出为:Mammal sound!

Tail wagging...

Fido is 2years old

时间: 2024-12-28 12:23:10

对于struct和class的认识的相关文章

struct&amp;&amp;class 空的大小

#include using namespace std; class ClassA { }; class ClassB { private: int b; }; class ClassC : public ClassA { }; class ClassD : public ClassB { }; class ClassE { public: int GetReturnValue() { return 0; } }; struct StructA { }; int main() { cout <

struct iphdr中的__LITTLE_ENDIAN_BITFIELD和__BIG_ENDIAN_BITFIELD

__LITTLE_ENDIAN_BITFIELD表示小端序,__BIG_ENDIAN_BITFIELD表示大端序. /usr/include/linux/ip.h中有一段代码定义了ip首部的结构体,如下: struct iphdr { #if defined(__LITTLE_ENDIAN_BITFIELD) __u8 ihl:4, version:4; #elif defined (__BIG_ENDIAN_BITFIELD) __u8 version:4, ihl:4; #else #err

GO语言struct语法

struct -使用type<Name>struct{}定义结构,名称遵循可见性规则 -支持指向自身的指针类型成员 -支持匿名结构.可作用成员或定义成员变量 -匿名结构也可以用于MAP的值 -可以使用字面值对结构进行初始化 -允许值通过指针来读写结构成员 -相同类型的成员可进行直接拷贝赋值 -支持==与!=比较运算符,不支持>或< -支持匿名字段,本质上是定义了以某个类型名称的字段 -嵌入结构作为匿名字段看起来像继承.但不是继承 -可以使用匿名字段的指针 package main

Python学习笔记(三十五)struct

摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431955007656a66f831e208e4c189b8a9e9f3f25ba53000 Python提供了一个struct模块来解决bytes和其他二进制数据类型的转换. struct的pack函数把任意数据类型变成bytes: >>> import struct >>> struc

C++中sizeof(struct)怎么计算?(转)

struct为空时,大小为1. 1. sizeof应用在结构上的情况 请看下面的结构: 1 struct MyStruct 2 { 3 double dda1; 4 char dda; 5 int type; 6 }; 对结构MyStruct采用sizeof会出现什么结果呢?sizeof(MyStruct)为多少呢?也许你会这样求: sizeof(MyStruct)=sizeof(double) sizeof(char) sizeof(int)=13 但是当在VC中测试上面结构的大小时,你会发现

P Invoke struct结构

一.获取Struct CHCNetSDK.NET_DVR_PTZPOS pos = new CameraTest.CHCNetSDK.NET_DVR_PTZPOS(); int size = Marshal.SizeOf(typeof(CHCNetSDK.NET_DVR_PTZPOS)); IntPtr ptr = Marshal.AllocHGlobal(size);// 申请内存 uint bytesReturnd = 0; try { if (!CHCNetSDK.NET_DVR_GetD

消息队列状态:struct msqid_ds

Linux的消息队列(queue)实质上是一个链表, 它有消息队列标识符(queue ID). msgget创建一个新队列或打开一个存在的队列; msgsnd向队列末端添加一条新消息; msgrcv从队列中取消息, 取消息是不一定遵循先进先出的, 也可以按消息的类型字段取消息. 1. 标识符(des)和键(key): 消息队列, 信号量和共享存储段, 都属于内核中的IPC结构, 它们都用标识符来描述. 这个标识符是一个非负整数, 与文件描述符不同的是, 创建时并不会重复利用通过删除回收的整数,

c语言struct和c++的class的暧昧

c语言风格的封装 数据放在一起,以引用和指针的方式传给行为c++ 认为封装不彻底 1数据和行为分开 对外提供接口 2没有权限设置 看看struct的一个例子 1 //data.h 2 3 //c语言风格的封装 数据放在一起,以引用和指针的方式传给行为 4 //c++ 认为封装不彻底 5 //1数据和行为分开 对外提供接口 6 //2没有权限设置 7 8 struct Date 9 { 10 int year; 11 int month; 12 int day; 13 }; 14 15 16 vo

python中的struct

我们知道python只定义了6种数据类型,字符串,整数,浮点数,列表,元组,字典.但是C语言中有些字节型的变量,在python中该如何实现呢?这点颇为重要,特别是要在网络上进行数据传输的话. python提供了一个struct模块来提供转换.下面就介绍这个模块中的几个方法. struct模块中最重要的三个函数是pack(), unpack(), calcsize() # 按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流) pack(fmt,v1, v2, ...) #

C 语言Struct 实现运行类型识别 RTTI

通过RTTI,能够通过基类的指针或引用来检索其所指对象的实际类型.c++通过下面两个操作符提供RTTI. (1)typeid:返回指针或引用所指对象的实际类型. (2)dynamic_cast:将基类类型的指针或引用安全的转换为派生类型的指针或引用. 对于带虚函数的类,在运行时执行RTTI操作符,返回动态类型信息:对于其他类型,在编译时执行RTTI,返回静态类型信息. 当具有基类的指针或引用,但需要执行派生类操作时,需要动态的强制类型转换(dynamic_cast).这种机制的使用容易出错,最好