斗破C++编程入门系列之十四:C++程序设计必知:作用域和可见性

斗破C++目录:

斗破C++编程入门系列之前言(斗之气三段)
斗破C++编程入门系列之二:Qt的使用介绍(斗之气三段)
斗破C++编程入门系列之三:数据结构(斗之气三段)
斗破C++编程入门系列之四:运算符和表达式(斗之气五段)
斗破C++编程入门系列之五:算法的基本控制结构之选择结构(斗之气八段)
斗破C++编程入门系列之六:算法的基本控制结构之循环结构(斗之气八段)
斗破C++编程入门系列之七:自定义数据类型(斗之气八段)
斗破C++编程入门系列之八:函数的定义与调用(斗之气八段)
斗破C++编程入门系列之九:函数重载与模板函数(斗之气九段)
斗破C++编程入门系列之十:类与对象:类的声明、成员的访问控制和对象(二星斗者)
斗破C++编程入门系列之十一:类与对象:构造函数和析构函数(四星斗者)
斗破C++编程入门系列之十二:类与对象:类的组合(五星斗者)
斗破C++编程入门系列之十三:类与对象:类模板(六星斗者)
斗破C++编程入门系列之十四:C++程序设计必知:作用域和可见性(六星斗者)

鸡啄米C++

记住首页不迷路:
http://www.jizhuomi.com/software/129.html

斗破观看顺序:

https://v.haohuitao.cc/yhplay/336-1-2.html

第一季☞第二季前2集☞特别篇1☞第二季3~12集☞特别篇2沙之澜歌☞第三季☞第四季☞三年之约☞缘起☞年番

斗气大陆等级:

斗气有十一个阶别,斗之气,斗者,斗师,大斗师,斗灵,斗王,斗皇,斗宗,斗尊,斗圣,斗帝。

斗气大陆上很久没有出现过斗帝了。

一、搏:

萧炎在赫蒙的攻击下并没有放弃斗志,他放下玄重尺,依靠灵活的速度配合八级崩成功战胜了赫蒙。这次死里逃生,也让药老决定将更搞级别的斗技"焰分噬浪尺"传授给萧炎。

在斗气大陆,一场死斗的结果,不但取决于两人自身实力段位,更与他们所修炼使用的斗技息息相关,斗技等级自上而下,依次分为 天 地 玄 黄 四档,即使自身实力有所欠缺,只要斗技等级略高一等,亦有望以下克上。

赫蒙战败的消息传到狼头佣兵团团长穆蛇的耳中,他命令召集所有五星斗者以上的人员进山搜索萧炎的下落。很快萧炎被发现,与穆蛇的交手中,由于等级悬殊,萧炎被逼到悬崖边上,无奈之下使用了"焰分噬浪尺",虽然穆蛇也受到了伤害,但是萧炎已经无力再进行还击,不得已选择落崖而下,危急时刻之前修习的飞行斗技被动触发,萧炎能否崖下求生,请听下回分解。

二、C++:类与对象:C++程序设计必知:作用域和可见性(六星斗者)

鸡啄米大神讲的很详细,这里我们为初学者缩减一个版本。

作用域要进行划分,那一定要通过一种符号来告诉我们,这种符号就是"{...}"(大括号)。我们发现无论是类、函数,还有命名空间,他们定义自己空间时都是使用的"{...}"(大括号)。如下:

结构体

cpp 复制代码
struct Monster{
    QString name; //名字
    int level;    //斗之气等级
};

cpp 复制代码
//斗技类
class Skill {
public:
    QString name; //斗技名称
};

函数

cpp 复制代码
template <typename T>
void level_up(T & anyone){

    //斗气等级提升
    anyone.level = anyone.level + 1;
}

命名空间

cpp 复制代码
namespace 斗气大陆{
    Person xiaoyan;
    Person xuner;
}

如果程序里所有变量名称都不同,那没有必要考虑作用域和可见性的问题,之所以要考虑作用域和可见性,是因为有时我们使用到了相同的变量名时,如何让二者之间的不产生冲突。

cpp 复制代码
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    //指定模版类型
    Person<double> xiaoyan("xiaoyan",17,8); //萧炎
    
    {
        //加了大括号之后,都是xiaoyan,但是不冲突,
        //括号内的xiaoyan与括号外的无关系
        Person<double> xiaoyan("xiaoyan2",18,9); //萧炎
    }
}

关于类空间,一个类内部所有的变量和函数都是在同一个空间内,所以相互可见,比如Person类,但是相对于另外一个类,比如Skill类,Person只能看见Skill类空间中public属性的变量和函数,而看不到Skill类的私有信息。如果想看到Skill的私有类型信息,要通过通过Skill的public属性的成员函数,或者将私有类型改为public属性,代码如下:

cpp 复制代码
//斗技类
class Skill {

public:
    QString name; //斗技名称
    
private:
    //私有类型,其他类看不到
    QString type; //类型 天 地 玄 黄
    //私有类型
    int level //斗技等级,上、中、下
public:
//开放给其他类的信息接口
QString getType(){
    return type;
}

};

//定义人的类型,有使用成员函数,则定义为class
template <typename T>
class Person{

    //析构函数
public:
    ~Person(){
        qDebug() << name << "的空间准备被释放掉";
    }

   public:

    //自定义的构造函数
    Person(QString name, int age, int level){

        if(name == "xioayan"){
            qDebug() << "开始创建萧炎";
        }
        else if(name == "xuner"){
            qDebug() << "开始创建熏儿";
        }
        else{
            qDebug() << "开始创建" << name;
        }

        this->name = name;
        this->age = age;
        this->level = level;
    }

   public:
    QString name; //名字
    int age;      //年龄
    T level;    //斗之气等级
    //斗技
    Skill skill;

   public:
    //成员函数
    template <typename T>
    bool fight(Monster monster){

        qDebug() << "monster level" << monster.level;

        if(this->level > monster.level){
            return true;
        }
        else{
            return false;
        }
    }

};

通过大括号构建的类空间,实现了类与类之间的数据隔离,通过Public属性又可以方便类之间信息的沟通。

三、英语:

先看几个单词:

  • space 空间
  • isolate 使...隔离
  • contact 联系
  • visibility 可见性

再看几个句子:

  • Can(吗?) Xiao Yan (萧炎)survive(生还) under (在...下面)the(这个) cliff(悬崖)?
  • 萧炎能否崖下求生?

under ... 在...下面

under the desk 在桌子下面

under the ground 在地面下面(在地下)

相关推荐
喵叔哟19 分钟前
重构代码中引入外部方法和引入本地扩展的区别
java·开发语言·重构
尘浮生25 分钟前
Java项目实战II基于微信小程序的电影院买票选座系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
hopetomorrow39 分钟前
学习路之PHP--使用GROUP BY 发生错误 SELECT list is not in GROUP BY clause .......... 解决
开发语言·学习·php
不是二师兄的八戒1 小时前
本地 PHP 和 Java 开发环境 Docker 化与配置开机自启
java·docker·php
小牛itbull1 小时前
ReactPress vs VuePress vs WordPress
开发语言·javascript·reactpress
怀澈1221 小时前
高性能服务器模型之Reactor(单线程版本)
linux·服务器·网络·c++
请叫我欧皇i1 小时前
html本地离线引入vant和vue2(详细步骤)
开发语言·前端·javascript
闲暇部落1 小时前
‌Kotlin中的?.和!!主要区别
android·开发语言·kotlin
爱编程的小生1 小时前
Easyexcel(2-文件读取)
java·excel
GIS瞧葩菜1 小时前
局部修改3dtiles子模型的位置。
开发语言·javascript·ecmascript