• C++学习第九课--类的成员函数、对象复制与私有成员笔记


    1、总述

    类相当于一种物体的模版,比如人民币模版,按着这个特性和模版生产出很多人民币,比如汽车模版,根据这个车的模版,可以生产出各式各样的车型,比如人类,有身高、体重、能吃饭睡觉等。

    2、类基础

    (1)一个类就是用户自己定义的数据类型,可以把类想象成一个名字空间,包着一对内容(成员函数、成员变量)。

    (2)一个类的构成,最常见的就是成员变量、成员函数这两种。当然也有很多特殊的成员函数,他们的名字也特殊,功能也特殊,这里先不讲。

    (3)访问类的成员(成员函数、成员变量)时,如果用类的对象来访问,就使用“对象名.成员名”来访问成员。如果用指向这个对象的指针访问,就使用“指针名->成员名”来访问成员。

    1. #include <iostream>
    2. #include <vector>
    3. using namespace std;
    4. class student
    5. {
    6. int num;
    7. string name;
    8. public:
    9. void func(int stuNum,string stuName)
    10. {
    11. this->num = stuNum;
    12. this->name = stuName;
    13. cout <<"num = " << this->num <<"\r\nname= " << this->name << endl;
    14. }
    15. };
    16. int main()
    17. {
    18. student mystu1;
    19. mystu1.func(20,"zhangsan");//调用成员函数
    20. student *mystu2 = new student();
    21. mystu2 = &mystu1;
    22. mystu2->func(25,"xiaoming");//调用成员函数
    23. return 0;
    24. }

    (4)类中public修饰符修饰的成员提供类的访问接口,暴露给外界,供外界使用,private成员提供各种实现类功能的细节方法,但不暴露给外界或者使用者,外界无法使用这些privater成员。

    (5)struct(结构)的成员默认为public属性的class(类),struct的定义如下:

    struct A{......};

    (6)class成员默认是private属性。class的定义如下:

    class A{......};

    可以看出,struct A{......};等价于 class A{public:......};

    建议在写代码时,尽量不要将struct和class混用。可以把没有成员函数的数据结构定义成struct,把有成员函数的数据结构定义为class。

    3、成员函数

    在.h文件中声明类,如下所示:

    1. class student
    2. {
    3. public:
    4. int num; //成员变量
    5. string name;//成员变量
    6. void func();//成员函数
    7. };
    8. 在.cpp文件中定义实现类,如下所示:
    9. class student
    10. {
    11. public:
    12. int num; //成员变量
    13. string name;//成员变量
    14. void func()//成员函数
    15. {
    16. cout <<"调用成员函数"<< endl;
    17. }
    18. };

    成员函数的调用:

    1. student mystu1;
    2. mystu1.func();

    4、对象的复制

    1. student mystu1;
    2. mystu1.num = 1234;
    3. mystu1.name = "qiaofeng";
    4. cout << "class mystu1\r\n" << "num = " << mystu1.num << "\r\nname= " << mystu1.name << endl;
    5. mystu1.func();
    6. student mystu2;
    7. mystu2 = mystu1;
    8. cout << "class mystu2\r\n" << "num = " << mystu1.num << "\r\nname= " << mystu1.name << endl;
    9. mystu2.func();
    10. student mystu3(mystu1);
    11. cout << "class mystu3\r\n" << "num = " << mystu1.num << "\r\nname= " << mystu1.name << endl;
    12. mystu3.func();
    13. student mystu4(mystu1);
    14. cout << "class mystu4\r\n" << "num = " << mystu1.num << "\r\nname= " << mystu1.name << endl;
    15. mystu4.func();
    16. student mystu5{ mystu1 };
    17. cout << "class mystu5\r\n" << "num = " << mystu1.num << "\r\nname= " << mystu1.name << endl;
    18. mystu5.func();

    可以看到,对象是可以复制的,上面几种写法都是对象复制,每个对象都有不同的地址,每个对象都保存在不同的内存中,彼此互不影响。而且成员变量的值都相等。

    对象复制有几种方式:

    “=”、“()”、“{ }”和“={ }”

    5、私有成员

    1. class student
    2. {
    3. int num; //私有成员变量或private: int num;
    4. string name;//私有成员变量或private: string name;
    5. public:
    6. void func(int stuNum,string stuName)//成员函数
    7. {
    8. this.num = stuNum;
    9. this.name= stuName;
    10. cout <<"调用成员函数"<< endl;
    11. }
    12. };

    类的私有成员变量和私有成员函数只能在类中的成员函数调用,外界无法直接调用。

    2022.06.30结。

  • 相关阅读:
    信息学奥赛算法入门之递归
    无代码开发添加数据入门教程
    0基础转行软件测试,如何实现月薪9.5k+
    数据结构与算法----栈和队列(Stack & Queue)
    经验分享丨中小企业如何低成本开发APP
    LabVIEW使用VI Package Manager(VIPM)下载和管理附加组件
    javaScript:鼠标事件
    李永乐六套卷复盘
    Java Double parseDouble(String s)方法具有什么功能呢?
    配置Nginx和其他应用的HTTPS访问
  • 原文地址:https://blog.csdn.net/euxnijuoh/article/details/125548401