最近在C++ 中用到extern关键字的一点点感悟

来源:互联网 发布:襄阳网络电视台台湾周 编辑:程序博客网 时间:2024/05/16 05:41

在C代码中extern关键字修饰变量很常见,而在真正的C++代码中extern关键字修饰变量却很少见。

extern修饰变量: 表明该变量在别的地方已经定义过了,在这里要修改或使用这个变量。

一、C的编码习惯小例子:

 (1) 在test1.h中有下列声明:

#ifndef TEST1H    #define TEST1H    extern char g_str[]; // 声明全局变量g_str    void fun1();    #endif
 (2) 在test1.cpp中

#include "test1.h"        char g_str[] = "123456"; // 定义全局变量g_str        void fun1() { cout << g_str << endl; }

 (3) 在test2.cpp中

#include "test1.h"     void fun2()    { cout << g_str << endl;    }

二、把上边的例子改造成C++习惯代码

 (1) test1类

test1.h

class Test1{private:char str[] = "123456";int  flag = 0;public:void Fun1();char *GetStr();void SetFlag(int value);int GetFlag();};
test1.cpp

#include "test1.h"void Test1::Fun1() { cout << str << endl; }char *Test1::GetStr(){return str;}void Test1::SetFlag(int value){flag = value;}int Test1::GetFlag(){return flag;}
(2) test2类
test2.h

class Test2{public:Test2();~Test2();void Fun2();void Fun3();public:Test1 *pGlobalVeriable_;};
test2.cpp

#include "Test2.h"Test2::Test2(){pGlobalVeriable_ = new Test1();}~Test2::Test2(){}void Test2::Fun2() { //cout << str << endl; cout << pGlobalVeriable_->GetStr() << endl; //通过test1的对象指针调用成员函数来获取test1类中的str 的值}void Test2::Fun3(){cout << pGlobalVeriable_->GetFlag() << endl; //通过test1的对象指针调用成员函数来设置获取test1类中的flag的值pGlobalVeriable_->SetFlag(5);cout << pGlobalVeriable_->GetFlag() << endl;}
(3)test3类
如果类test3 想与类test2中这个test1类对象同步,可以在test2类中,实例化test3类对象时,把对应的test1类对象指针传进来:
test3.h

class Test3{public:Test3(Test1 *GlobalVeriable);  // 实例化时,传入类test1实例化对象指针~Test3();void Fun3();void SetGlobalVeriable(Test1 *GlobalVeriable);public:Test1 *pGlobalVeriable_;};

test3.cpp

#include "Test3.h"Test3::Test3(Test1 *GlobalVeriable){SetGlobalVeriable(GlobalVeriable);}~Test3::Test3(){}void Test3::SetGlobalVeriable(Test1 *GlobalVeriable){pGlobalVeriable_ = GlobalVeriable;}void Test3::Fun3(){cout << pGlobalVeriable_->GetFlag() << endl;pGlobalVeriable_->SetFlag(7);cout << pGlobalVeriable_->GetFlag() << endl;}

题外话:

本人是写一直C代码,最近在纯C++代码基础上加一个一部分功能,开始为了简单用extern关键字修饰变量,把

功能基本完成了,但在纯C++代码中看着这几个extern关键字越看越别扭,决定用C++的习惯改一下。

本人感觉C有C的好处:简单直白,容易实现,其实extern声明的变量也可以统一管理,这样跟C++就有点类似了;

C++有C++的好处:委婉含蓄 ,繁琐一些,代码多了可读性也不会下降;

在项目过程中我之所以没有把extern声明变量没有用统一管理的方法,就是想保持原来代码工程C++统一的代码风格。

仅个人观点,各有个的好处,O(∩_∩)O~


0 0
原创粉丝点击