zoukankan      html  css  js  c++  java
  • C++ 类

    视频教程:类的成员函数------>包含类文件和主程序分离

    class MyClass   //自定义类
    {
        //默认私有
    public:
        CString name;//公有属性
        int num;
    
    public: int Add(int x, int y) {  //公有方法
            int s;
            s = x + y;
            return s;
        }
    
        inline int MAX(int a, int b) {  //内联函数.把函数体代码直接插入调用点
            int s = a > b ? a : b;
            return s;
        }
        int lifan(int x);  //在类内声明类外函数
    
        int cenfa(int a, int b) {  //调用私有方法
        int s;
        s = cen(a, b);
        return s;
    }
    
    private:int cen(int x, int y) {  //私有方法,只能被本类调用
        int s;
        s = x * y;
        return s;
    }
    
    protected:int fanfa() {       //受保护方法,只能被本类和子类调用
    
    }
    
    
    
    };
    
    int MyClass::lifan(int x) {  //把类外函数定义为类内函数.注意:在类内必须声明
        int y = x * x*x;
        return y;
    }
    
    
    void CCMDlg::OnBnClickedButton1()
    {
        // 按钮1
        
        MyClass mc;
        mc.name = _T("张三");
        int x=mc.Add(10, 20);
        int y = mc.cenfa(5, 10);
    
        MyClass *p = &mc;  //对象指针
        p->num = 1000;   //通过指针调用属性
        x=p->MAX(20, 30);  //调用内联函数
        y=mc.lifan(10);
        
        
        //SetDlgItemText(label1, );
        
    }

     类和主文件分离:

    在解决方案资源管理器中右击工程-->添加-->类

    点击确定后会自动生成

    在头文件的类声明中声明属性和方法

    注意:在头文件中声明类时,几乎跟类的定义是一样的,只是把方法体放到了cpp中

    在cpp文件中写方法体

    在cpp中必须写文件头

    cpp中方法属于类外方法,所以必须用::声明属于类方法

     在主文件中添加文件头后,就可直接调用属性和方法了:

     this指针:

     一个类的对象所占用的空间只是属性空间的和,并不包括方法的空间。因为一个类的各个对象是调用同一个方法的,所以方法没必要为各个对象都分配空间

    this 是指向这个类创建的对象的指针

    this指针视频教程

     

     构造函数:定义对象时,自动执行的函数

    构造函数视频教程

    主要用来初始化操作

    构造函数名必须与类名相同,没有返回值

     

     构造函数的初始化表:

     

    用name1来初始化name,用num1来初始化num

    注意:只有能直接复制的才能用初始化表

    不能用this指针

     析构函数:对象即将销毁时被调用

                       

     

    析构函数视频教程

     

     类的静态属性:

                              

    注意:必须在类外初始化

    可以通过对象来访问静态属性:duixian.mm

    也可以通过类名访问静态属性:Cmyclass::mm

    视频教程

     类的继承:

     构造函数和析构函数不能被继承

    派生类的定义格式如下:

          class <派生类名>:[继承方式]<基类名1>

                                     [,[继承方式]<基类名2>,...,[继承方式]<基类名n>]

          {

                  <派生类新增的数据成员和成员函数定义>

          };

     

    3种继承方式下基类成员在派生类中的访问属性

     

     子类的构造函数和析构函数:

    视频教程

     构造函数和析构函数不能被继承

     

    规则:

    1.如果子类没有构造函数,就调用父类及祖类无参构造函数

    2.如果子类有构造函数(不论是无参还是有参),先调用父类及祖类无参构造函数,再调用自己的构造函数

    由1、2总结:子类没有显示调用父类及祖类构造函数,默认调用父类及祖类的无参构造函数;如果父类及祖类没有无参构造函数就报错

     

    调用父类及祖类构造函数:

     

     

    系统会自动调用父类及祖类及对象的析构函数

    父对象与子对象相互转换:

    视频教程

    子类对象可以给父类对象赋值,俗称大材小用,在赋值时会舍弃子类新增成员

    父类对象不能给子类对象赋值,会出现填不满不可预知的错误

     

    一般用指针操作,指针可以互转;指针类型转换后,指针的地址没有变

     

     虚函数:

     视频教程

     

    CmyclassA *p;
    p = &mb; //子类对象地址赋值给父类指针;只是赋值属性,不影响一般函数,但影响虚函数

    也就是说:这种赋值法,对于一般函数p还是指向父类函数;如果把父类的同名函数设置为虚函数,那么p就指向子类函数了

     

    虚函数的设置:在函数声明时,声明虚函数virtual

     

     天子骄龙:生命诚可贵 时光价更高

  • 相关阅读:
    nginx把POST转GET请求解决405问题
    Redis安装与配置
    SQL语句-SELECT语句
    SQL语句-delete语句
    SQL语句-UPDATE语句
    SQL语句-INSERT语句
    SQL语句-create语句
    MySQL权限详解
    GTID复制详解
    ansible-playbook的应用实例
  • 原文地址:https://www.cnblogs.com/liming19680104/p/10582548.html
Copyright © 2011-2022 走看看