怎样使用c++

前言

之前学过c++语法,基本的语法还略微记得。项目中有了需求,要用c++来实现。撸码前我想的问题是怎样组织c++文件,c++的工程项目规范是什么,最关心的是c++工程是怎样解决解耦合,提高代码复用性和健壮性的。由于是新手,索性就学c++新特性,所以选择了>=c++11。平时一般用java和python,都有各自的import和包管理机制,c++也有对应的namespace。

namespace实验

一共三个文件:main.cpp, model_a.h, model_a.cpp
组织关系是,model_a为模型类或者utils类,里面有其方法,.cpp为实现文件,main为主文件。model_a中有一个变量 varA,有两个函数。

model_a.h

// ModelA.h
#include<vector>
#ifndef MODELA_H
#define MODELA_H

namespace modela{
    int varA = 10;
    using std::vector;  //by this, don't need to write std::vector in this scope, just use vector
    double maf1(const vector<double>& data);
    double maf2(const vector<double>& data);
    
}

#endif

model_a.cpp

#include<iostream>
#include<vector>
#include"ModelA.h"
using namespace std;
double modela::maf1(const vector<double>& data){
    
    modela::varA++;
    cout<<"this is maf1, print from modela.cpp, varA++ then varA="<<modela::varA<<endl;
    //cout<<"this is maf1(), print from modela.cpp."<<endl;
    return 10.0;
}

double modela::maf2(const vector<double>& data){
    
    cout<<"this is maf2, print from modela.cpp, now varA="<<modela::varA<<endl;
    modela::varA++;
    cout<<"this is maf2, print from modela.cpp, varA ++, now varA="<<modela::varA<<endl;
    //cout<<"this is maf2(), print from modela.cpp."<<endl;
    return 10.0;
}

main.cpp

#include<iostream>
#include"ModelA.h"
using namespace std;
int main(){
    vector<double> data(10);
    modela::maf1(data);
    modela::maf2(data);
    cout<<"call modela::varA: from main, varA="<<modela::varA<<endl;
    modela::maf1(data);
    return 0;
}

结果:
上述文件编译通过,链接时出错,说varA定义了两次,将varA定义为 static后编译链接通过。原因可能是:static在编译时就在内存静态区域进行了初始化,非static变量,在include的时候会在多个文件都进行初始化,所以提示重复定义。

varA在外部调用的时候,每次都是初始值10,mdoel_a自己调用时能够保存历史更改值。

c++可以通过namespace来管理各个模块,但是命名空间不能使用‘.’号定义,如:namespace io.github.model{} 会报错。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,080评论 19 139
  • 大家好,我是IT修真院郑州分院第6期的学员,一枚正直纯洁善良的JAVA程序员今天给大家分享一下,Maven常用打包...
    一筒君阅读 1,022评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,786评论 18 399
  • 重新系统学习下C++;但是还是少了好多知识点;socket;unix;stl;boost等; C++ 教程 | 菜...
    kakukeme阅读 20,069评论 0 50
  • C++入门基础 namespace专题讲座 namespace概念 所谓namespace,是指标识符的各种可见范...
    蔡俊宇阅读 810评论 0 2