1.C++可变参数。
java 可变参数 int...
C++ 可变参数 ... 需要引入头文件 stdarg.h头文件
va_list
va_start
va_arg
v a_end
#include <iostream>
#include <stdarg.h>
using namespace std;
void sum(int count, ...) {
va_list arg;
va_start(arg, count);
for (int i = 0; i < count; ++i) {
cout << va_arg(arg, int) << endl;
}
va_end(arg);
}
int main() {
sum(6, 1, 2, 3, 4, 5, 6);
return 0;
}
2.C++static关键字。
//static int num=9; //不允许初始化
//static 变量需要先定义 再实现
//static void update() {} 静态函数 只能操作静态方法以及静态变量
//Student::update() //静态函数调用
class Student {
public:
// static int num = 9; //静态变量 不允许初始化 此处直接编译报错
static int num; //先定义
int age;
static int getAge() {
return num;
// return this->age;// 编译报错 静态方法不能操作非静态变量
}
};
int Student::num = 9; //再初始化
3.C++对象中,为什么需要 this。
内存区域:栈区域 堆区域 全局区域(静态区 常量区 字符串区) 代码区域
//this 对应的内存地址
//默认构造函数 栈区开辟空间 生成this指针==对应的内存地址
int main() {
Student student1;
student1.setAge(88);
student1.num = 1;
Student student2;
student2.setAge(99);
student2.num = 2;
Student::num = 6;
//静态变量 静态函数没有this
cout << "student1的age:" << student1.getAge() << ",num: " << student1.num << endl;
cout << "student2的age:" << student2.getAge() << ",num: " << student2.num << endl;
cout << "Student的num: " << Student::num << endl;
return 0;
}
输出:
student1的age:88,num: 6
student2的age:99,num: 6
Student的num: 6
4.const修饰函数的this意义何在。
//this 是一个指针常量。this不能修改
// 默认现在:this 等价于 const Student * const 常量指针常量(地址不能改,地址对应的值不能改)
int getConstAge() const { //const修饰this this对应的所有值都不能修改 //修饰的方法变成了只读
// this->age = 20; //编译报错
return this->age;
}
C++在函数声明时,后面跟个const是限定函数类型为常成员函数, 常成员函数是指不能改变成员变量值的函数。
5.友元函数与友元类实战运用。
//类声明友元函数,友元函数可以调用函数的私有成员
class Person {
private:
int age = 0;
public:
int getAge() {
return this->age;
}
void setAge(int age) {
this->age = age;
}
friend void update(Person &person, int age);
};
// 友元函数直接访问 私有属性
void update(Person &person, int age) {
person.age = age;
}
int main() {
Person person;
// person.age = 10; //编译报错 私有变量不能被外界访问
update(person, 666);
cout << person.getAge() << endl;
return 0;
}
6.各个函数的区别
- 静态函数:只能操作静态变量,通过类名::函数名来调用
- 友元函数:可以通过类的外部操作类的私有属性
- 普通函数:正常函数调用
- 构造函数:实例对象创建时调用
- 析构函数:实例对象销毁时调用
- 拷贝构造函数:对象赋值时调用
网友评论