美文网首页
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原理与友元函数友元类

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

  • C++中的友元

    友元的介绍 什么是友元?友元是C++中的一种关系友元关系发生在函数与类之间或者类与类之间友元关系是单项的,不能传递...

  • C++语言基础(03)

    1.内存分配 C/C++ 内存分区: java 创建对象 2.常函数 3.友元函数和友元类 友元函数 友元类 4....

  • c++ 友元

    在c++中,通过关键字friend声明为友元。友元可以范围与其有好友关系的类中私有成员。友元包括友元函数和友元类。...

  • 10-C++远征之模板篇-学习笔记

    C++远征之模板篇 将会学到的内容: 模板函数 & 模板类 -> 标准模板类 友元函数 & 友元类 静态数据成员 ...

  • 慕课网-C++远征之模板篇(上)-学习笔记

    C++远征之模板篇 将会学到的内容: 模板函数 & 模板类 -> 标准模板类 友元函数 & 友元类 静态数据成员 ...

  • 第十一章 使用类(2)友元

    (二)友元 1.友元的概念 友元有三种:友元函数,友元类,友元成员函数。这里主要介绍友元函数。通过让函数成为类的...

  • C++入门10 -- 友元,内部类,运算符重载

    友元 友元包含友元函数和友元类; 若将函数A(非成员函数)声明为类C的友元函数,那么函数A就能直接访问类C对象的所...

  • 友元类和嵌套类

    友元类 友元函数用于类的扩展接口中,类并非只能拥有友元函数,也可以将类作为友元,该类称为友元类。 友元类的所有方法...

  • C++ 友元,内部类,运算符重载

    友元 友元包括友元函数和友元类 如果将函数A(非成员函数)声明为类C的友元函数,那么函数A就能直接访问类C对象的所...

网友评论

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

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