frankfan的胡思乱想

学海无涯,回头是岸

结构体与类

类与结构体 类与封装

本章讲授的主要内容是C++中的类的定义以及与结构体的对比。

C++是C语言的超集,是对C语言的完全兼容。

C语言是一门面向过程的语言,而C++则是多范式语言,而面向对象是其基本范式。在C语言中,使用结构体来模拟面向对象编程的思想,因此在C++中,对结构体struct这个关键字做了语义的扩展,直接将其等价定义为类class。C++中类的关键词是class而结构体structclass唯一的区别在于成员的默认权限不同,默认情况下,class成员的权限为privatestruct成员的权限为public

这也是二者的唯一区别。

struct

C++中的struct就是类,成员变量访问权限为public的类,并且能与C++的原生类class 混用(不推荐)

#include <iostream>

struct Node{
  int value;
  Node(int val = 0):value(val){ }
  ~Node(){}
  void showValue(){
      cout<<value<<endl;//本质是this->value 通过对象指针访问对象成员
  }
};

using namespace std;
int main(){
  
  //定义在栈中的node对象,调用了默认构造函数
  Node node;
  node.value = 12;
  //struct 类,成员默认是public访问权限
  cout<<node.value<<endl;//12
  node.showValue();//12
  return 0;
}

类的定义与实现可以拆分,通常将类的声明源码写在.h文件中,该文件可以四处#include ,根据编译原理,声明时是不会生成符号的,因此也不会出现重定义这样的问题。而将类的实现源码写在.cpp文件中。

//Node.h
#pragram once
struct Node{
    int value;
    Node(int v = 0);
    ~Node();
    void showValue();
};
//Node.cpp
#include <iostream>
#include "Node.h"
using namespace std;
Node::Node(int val):value(val){}
void Node::showValue(){
    cout<<value<<endl;
}
Node::~Node(){}

class

在C++中,classstruct唯一不同的是,默认情况下,class的成员访问权限是private的(私有)

在面向对象语言的世界中,类的成员以及成员函数通常都有3个层次的访问权限,分别是:

  • private
  • protect
  • public

这三者的权限是依次放开的,private的访问权限最严,只有类本身内部能访问,其外部以及其子类都无法访问,而protect次之,类本身及其子类能访问,public则无权限限制,无论类内部外部还是其子类,均能正常访问。

#include <iostream>
using namespace std;
class Node{
    int value;
    void showValue(){
        cout<<value<<endl;
    }
};
int main(){
    Node node;
    //node.value = 12;无法正常访问value成员,class类默认访问权限是private
    return 0;
}
#include <iostream>
using namespace std;
class Node{
public:
    int value;
    void showValue(){
        cout<<value<<endl;
    }
};
int main(){
    Node node;
    node.value = 12;
    return 0;
}
#include <iostream>
using namespace std;
class Node{
public:
    int value;
    void showValue();
};

void Node::showValue(){
    cout<<value<<endl;
}
int main(){
    Node node;
    node.value = 12;
    node.showValue();//12
    return 0;
}

今天的内容主要就是类与结构体的一些对比,以及简单的访问权限。

posted on 2021-12-28 00:34  shadow_fan  阅读(106)  评论(0)    收藏  举报

导航