目录
- C++类中的权限
- 编译宏使用
C++类中的权限
在C++中
private成员函数只能在类内使用,是不对外开放的
public成员函数,既能在类内使用,又能在类外使用
private成员只能在类内使用
编译宏使用
#include<iostream>
#include <vector>
#include <algorithm>
#include <istream>
#include <string>
#include <sstream>
#include <set>
#ifdef BNode
struct BNode
{
/* data */
BNode* left_son;
BNode* right_son;
int data;
BNode(int a):data(a),left_son(nullptr),right_son(nullptr)
{
}
};
int find_depth(BNode* bn)
{
if(bn==nullptr/* && bn->right_son==nullptr*/)
{
return 0;
}
// depth++;
int left_depth = find_depth(bn->left_son);
int right_depth = find_depth(bn->right_son);
/* code */
// depth++;
return right_depth>left_depth?right_depth+1:left_depth+1;
}
#endif
#ifdef vivo
// 输出不能被7整除的工号 vector
bool find_num( const std::vector<int>& vec, int& count)
{
bool found= false;
std::vector<int> has7;
std::set<int> has7_set;
std::set<int> all_set;
for(const auto& ele:vec)
{
all_set.insert(ele);
if(ele%7==0 && ele!=0)
{
has7_set.insert(ele);
count++;
found=true;
has7.push_back(ele);
}
}
// 计算差
std::set<int> out;
std::set_difference(all_set.begin(), all_set.end(), has7_set.begin(), has7_set.end(), std::inserter(out, out.begin()));
int count2 = 0;
for(const auto& ele:out)
{
std::string tmp_string(std::to_string(ele));
// if(std::find(tmp_string.begin(), tmp_string.end(), "7")!=);
auto res = tmp_string.find("7");
if(res!=tmp_string.npos)
{
count2++;
found = true;
}
}
count +=count2;
return found;
}
#endif
#ifdef BASE
class Base
{
public:
Base(int data):_data(data){
std::cout<< " constructor " << std::endl;
}
int data(){return _data;}
void set_data(int data){_data = data;}
void func(){
private_fun();
}
private:
void private_fun(){
auto a = data();
a++;
set_data(a);
}
private:
int _data;
};
#endif
int main(int argc, char const *argv[])
{
#ifdef vivo
std::string line;
std::string word;
std::vector<int> vec_num;
std::getline(std::cin, line);
std::stringstream in_stream(line);
while(in_stream>>word)
{
vec_num.push_back(std::atoi(word.c_str()));
}
int count =0 ;
if(find_num(vec_num, count))
{
std::cout<<count<<std::endl;
}
else{
std::cout<<0<<std::endl;
}
return 0;
#endif
#ifdef BASE
Base* b = new Base(29);
std::cout<< "data: "<< b->data() <<std::endl;
b->func();
std::cout<<"data: "<< b->data()<<std::endl;
#endif
}
在终端输入如g++ test1.cpp -o test1 -DBASE
的命令,就能实现对程序中每一块的编译控制