C++ this原理与可变参数及友元函数友元类分步详解用法
lpf_wei 人气:01.c++可变参数的应用
#include <iostream> #include <stdarg.h> //可变参数的支持 using namespace std; void add(int count,...){ va_list vp; va_start(vp, count); // 取出可变参数的一个值 int number = va_arg(vp, int); cout << number << endl; // 取出可变参数的一个值 number = va_arg(vp, int); cout << number << endl; // 取出可变参数的一个值 number = va_arg(vp, int); cout << number << endl; // 越界之后取出来的是0 number = va_arg(vp, int); cout << number << endl; // 关闭阶段 va_end(vp); } int main() { add(546, 6,7,8); return 0; }
日志输出:
/home/ms/workspace/study/ndk/CPlusStudy/cmake-build-debug/CPlusStudy
可变参数输出
6
7
8
0
- #include <stdarg.h> 如果使用可变参数,需要导入这个
- Java的可变参数: int …
- C++的可变参数写法:…
- va_list vp : 可变参数的动作
- va_start(vp, count):参数一:可变参数开始的动作vp,参数二:内部需要一个 存储地址用的参考值,如果没有第二个参数,内部他无法处理存放参数信息
- 越界之后取出来的是0
项目中的应用:
int add(int count,...){ va_list va; va_start(va,count); for (int i = 0; i < count; ++i) { int number=va_arg(va,int); cout << number << endl; } va_end(va); } int main() { std::cout << "可变参数输出" << std::endl; add(3, 6,7,8); return 0; }
日志输出:
可变参数输出
6
7
8
第一个参数count可以作为可变参数的数量。
2.static 静态变量与静态方法
class Douluo { public: // static char * name="唐三"; 静态变量不能直接初始化 编译不通过 static char * name; Douluo() { // name="唐三"; //静态变量不能在构造方法初始化 } static void update() { // name="唐三"; //静态变量不能在静态方法初始化 cout<<"name="<<name<<endl; } void update2() { // 运行报错 // name="唐三"; //静态变量不能在非静态方法初始化 } }; /*静态变量正确初始化姿势*/ char* Douluo::name="唐三"; int main() { // std::cout << "可变参数输出" << std::endl; // add(3, 6,7,8); std::cout << "static的应用" << std::endl; Douluo douluo; // Douluo::name="唐三"; //静态变量不能在main方法初始化 会报错 douluo.update2(); Douluo::update(); // 类名::可以调用静态函数 调用静态方法的正确姿势 return 0; }
通过实际操作可知:
- 静态变量不能在声明的时候初始化,直接编译不通过
- 静态变量不能在构造方法初始化,运行报错
- 静态变量不能在静态方法初始化,运行报错
- 静态变量不能在非静态方法初始化,运行报错
- 静态变量不能在main方法初始化运,行报错
- 静态变量只能在类外部,main方法外部初始化:char* Douluo::name=“唐三”;
- 静态方法使用**类名:
加载全部内容