结构体与类
类 类与结构体 类与封装
本章讲授的主要内容是C++中的类的定义以及与结构体的对比。
C++是C语言的超集,是对C语言的完全兼容。
C语言是一门面向过程的语言,而C++则是多范式语言,而面向对象是其基本范式。在C语言中,使用结构体来模拟面向对象编程的思想,因此在C++中,对结构体struct这个关键字做了语义的扩展,直接将其等价定义为类class。C++中类的关键词是class而结构体struct与class唯一的区别在于成员的默认权限不同,默认情况下,class成员的权限为private 而struct成员的权限为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++中,class与struct唯一不同的是,默认情况下,class的成员访问权限是private的(私有)
在面向对象语言的世界中,类的成员以及成员函数通常都有3个层次的访问权限,分别是:
privateprotectpublic
这三者的权限是依次放开的,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) 收藏 举报
浙公网安备 33010602011771号