首页 > 编程语言 >2——of C++ class relative

2——of C++ class relative

时间:2023-10-16 22:45:12浏览次数:39  
标签:int 继承 private relative 访问 C++ 权限 speed class

C++类

C++和java都是面向对象的语言,所以类的语法上看起来相似,但也有些区别,比如访问控制符的书写规范。除此之外,在访问控制权限,静态static等内容也有很大区别

1.访问控制权限

  • 访问控制符
//不加的默认私有
class player {
 int x, y;
 int speed;
 void move(int a, int b){
     x += a * speed;
     y += b * speed;
 }
};
//加访问控制符
class player {
public:
 int x, y;
 int speed;
private:
 void move(int a, int b){
     x += a * speed;
     y += b * speed;
 }
};
  • 访问权限的继承

---- C++访问权限符有三种,public-可以任何位置访问类成员;protected-可以在子类(派生类中)访问父类成员;private-只能在自己类中访问成员
----类继承也包括public、protected和private继承

class player : public person {
...
};

ps:类继承后,成员的访问权限其实产生了一种"降级"效应。就比如原先的private权限访问度已经很低了,无论哪种权限继承,private成员都只能在本类中被访问;而对于像protected权限是为了让子类能访问到父类成员,比他高的public继承或者private继承都不会影响原先的效果,而private继承反倒会让它“降级”——即原本在父类的protected成员,经过private继承后在子类中变成了private成员;同理public成员也可能被protected继承或者private继承所“降级”

  • 对比java的权限访问符

相比较C++,java的访问权限符多了个default(缺省),并且各权限控制是针对包的管理。但java没有权限继承,这其实像是为了简化的一些骚操作,相似的规定就比如java也不能多继承(多继承就不能有super了)

static关键字的两种用法

  • 在类或结构体内使用static关键字修饰成员或方法,就表示静态成员或静态方法

  • 若是在类或结构体外部:若是静态全局变量,那这个全局变量就只声明在本cpp文件(翻译单元)中,且不能被别的extern导出;若是静态局部变量,那它的声明周期就相当于整个程序的声明周期,但作用范围被限制在本作用域内

  • 同名的全局变量,则会导致重复声明的链接错误,要么通过static限制本cpp文件,要么通过extern外联其他同名全局变量

1.static解决

//a.cpp中
static int s_var = 5;

//main.cpp中
int s_var = 10;
int main(){
    std::cout << s_var << std::endl;
}

//输出10

2.extern解决

//a.cpp中
int s_var = 5;

//main.cpp中
extern int s_var;   //注意这里没有了赋值
int main(){
    std::cout << s_var << std::endl;
}

//输出5
//这被称为 external linkage或external linking。

this(and super-java单继承才有)

标签:int,继承,private,relative,访问,C++,权限,speed,class
From: https://www.cnblogs.com/jay-home/p/17768460.html

相关文章

  • C++11手写线程池1
    线程池结构  任务队列结构体 保存一个回调函数指针和一个,参数指针 实现任务队列 为了多个生产者多个消费者取东西混乱的避免要加互斥锁线程池threadpool类要实现的初始化一个线城池参数是最小数和最大数   malloc和new的区别new要调用该类的构......
  • elasticsearch通过Java class类的@Setting和@Mapping来定义索引index
    今天就来和大家讲讲如何将es索引中的mapping和setting在索引index和class联系起来,其实在这个问题也困扰我好久了,一直没有解决,在elasticsearch7.x版本的时候貌似好像可以用request在程序中来建立索引,像Stringindex=“{“mapping”:...}”之类的操作,干起来比较复杂,在elasticsearch......
  • C++接入redis
    项目地址https://github.com/sewenew/redis-plus-plushttps://github.com/redis/hiredis#1、编译安装hiredis项目wgethttps://github.com/redis/hiredis/archive/refs/tags/v1.2.0.tar.gzcdhiredis#编译安装make&&makePREFIX=安装到指定目录install#2、编译......
  • C++的简单语法
    ​C++库里面的一些基础函数以及迭代器的使用:迭代器:首先,可以将迭代器简单地从方向和限制简单地分为四类:1.正向   intmain(){ strings1="hello"; s1+=""; s1+="world"; cout<<s1<<endl; string::iteratorit1=s1.begin();//在这里,s1.begin()代表......
  • 【Kaggle】Spam/Ham Email Classification
    基本思想需求是对垃圾邮件进行分类。思路1:使用LSTM、GRU等自带的时序模型进行分类。思路2:使用spacy这个NLP库,里面的textcat可直接用来文本分类实际上,思路2比思路1更优。由于是入门题,就只使用思路1了。思路2代码参考:https://blog.csdn.net/qq_21201267/article/details/109109......
  • linux c++程序使用MD5
    为避免找到的开源md5算法有坑,一般直接用openssl自带的MD5相关函数实现;一般系统已默认安装openssl,没装的话直接指令安装ubuntusudoapt-getinstalllibssl-devcentossudodnfinstallopenssl-devel示例代码#include<openssl/md5.h>unsignedcharmd5[MD5_DIGEST_LENGT......
  • 警惕 C++ 中的隐式类型转换
    今天文章的主题灵感来自客户的一个问题:我在研究一个代码中的栈溢出问题。为了减小栈帧的大小,我尽可能多地删除了局部变量,但仍有很多栈空间无法解释。除了局部变量、参数、保存的寄存器和返回地址之外,栈上还有什么其他的东西呢?我的回答是,嗯,还有结构化(SEH)的异常处理信息,但这通常不......
  • Qt/C++编写物联网组件/支持modbus/rtu/tcp/udp/websocket/mqtt/多线程采集
    一、功能特点支持多种协议,包括Modbus_Rtu_Com/Modbus_Rtu_Tcp/Modbus_Rtu_Udp/Modbus_Rtu_Web/Modbus_Tcp/Modbus_Udp/Modbus_Web等,其中web指websocket。支持多种采集通讯方式,包括串口和网络等,可自由拓展其他方式。自定义采集间隔(精确到毫秒)和超时次数,超时后自动将离线的文件......
  • C#学习笔记之类(Class)
    一、定义:以class关键字开始,后跟类的名称。类的主体(成员)包含在一对花括号内。一般形式:<accessspecifier>classclass_name{//变量<accessspecifier><datatype>variable1;<accessspecifier><datatype>variable2;...<accessspecifier>......
  • jclasslib的安装
    双击安装包打开后点击下一步,然后选择安装的路径。默认路径,如果c盘有空间不建议更改路径,然后再次点击下一步依然选择下一步最后点击完成即可完成安装。现在可以使用啦注:如果需要安装包,请点击下面链接:专业的字节码查看工具——jclasslib......