美文网首页
C++语言之this原理与友元函数友元类

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

作者: Dalvik_ | 来源:发表于2021-03-31 15:00 被阅读0次

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

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

    相关文章

      网友评论

          本文标题:C++语言之this原理与友元函数友元类

          本文链接:https://www.haomeiwen.com/subject/kcbkcltx.html