C++语言之this原理与友元函数友元类

1.C++可变参数。
java 可变参数 int...
C++ 可变参数 ... 需要引入头文件 stdarg.h头文件
va_list
va_start
va_arg
v a_end

#include 
#include 

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.各个函数的区别

  • 静态函数:只能操作静态变量,通过类名::函数名来调用
  • 友元函数:可以通过类的外部操作类的私有属性
  • 普通函数:正常函数调用
  • 构造函数:实例对象创建时调用
  • 析构函数:实例对象销毁时调用
  • 拷贝构造函数:对象赋值时调用

你可能感兴趣的:(C++语言之this原理与友元函数友元类)