C++

作者: 恰似一碗咸鱼粥 | 来源:发表于2019-04-26 15:48 被阅读0次

    1.用类创建对象

    对象是类的
    实例
    类的定义:

    class C {
        int p;
        int f();
    };
    

    对象的定义:

    C ca, cb;
    

    类中特殊的两种函数:构造函数constructor,析构函数destructor

    ctor

    特点:自动调用,与类同名,且无返回值(前面连void都不能有),可以重载,可以不带参数

        C() {
            p = 1;
        }
        C(int a) {
            p = a;
        }
    

    使用列表初始化,窄化检查,编译器自动帮你检查类型

    C ca, cb{7};
    

    创建一个圆类:

    #include <iostream>
    using namespace std;
    
    class Circle {
    public:
        Circle() {
            radius = 1.0;
        }
        Circle(double r) {
            radius = r;
        }
        double getArea() {
            return 3.14*radius*radius;
        }
    private:
        double radius;
    };
    
    int main() {
        Circle C1, C2(2.0);
        cout << C1.getArea() << endl << C2.getArea();
        getchar();
        return 0;
    }
    

    2.对象拷贝和匿名对象

    C++中新增了auto和decltype作类型推断
    其中decltype通过已声明的对象类型声明另一个对象

    auto C1=Circle();
    decltype(C1) C2 = Circle(2.0);
    

    对象拷贝:circle1=circle2
    虽然它们的属性相同,但是它们是两个不同的对象
    匿名对象:只是用一次
    Circle C1=Circle{0.3}
    这次给C1赋值就用了匿名对象,等号右边产生了一个只使用一次的对象并拷贝到等号右边。
    再例如cout<<Circle{3.2}.getArea()
    局部类和构造类
    1.局部类
    类只能在函数中调用

    int f(){
      class A{};
    }
    

    2.嵌套类
    即在类中定义一个类

    类的声明与实现分离

    将函数的声明放在.h文件中
    将函数的定义放在.cpp中

    内联声明与内联函数

    当函数在类声明中实现,它自动变为内联函数
    但如果在类外声明,在最前面加上inline,则效果完全相同

    小栗子:
    main.cpp

    #include <iostream>
    #include "Circle.h"
    using namespace std;
    
    int main() {
        Circle C1{ 5.8 };
        cout << C1.getArea();
        getchar();
        return 0;
    }
    

    Circle.h

    #pragma once
    #ifndef CIRCLE_H_
    #define CIRCLE_H_
    class Circle {
    public:
        Circle();
        Circle(double radius);
        double getArea();
    private:
        double radius;
    };
    
    #endif // !CIRCLE_H_
    

    Circle.cpp

    #include "Circle.h"
    
    Circle::Circle() {
        radius = 1.0;
    }
    Circle::Circle(double r) {
        radius = r;
    }
    double Circle::getArea() {
        return 3.14*radius*radius;
    }
    

    3.Windows Api

    MessageBox

    关于最后一个参数,如果填入MB_OK,那么消息框只有一个确定选项,此外还有MB-YESNO等等,如果加入|符号或者+号,那么可以加上图标
    MessageBox的返回类型为整数,其返回你按下的按钮的id,比方说cancel按钮的id,No按钮的id等等。

    #include <Windows.h>
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmd, int nCmdShow) {
        //第一个参数为指定主窗口,若为NULL,则自身为主窗口
        //第二个参数指定窗口中的内容
        //第三个参数指定标题
        //第四个参数为消息框的类型
        while (1) {
            MessageBox(NULL, "小哼哼是哪个小可爱呀", "嘻嘻嘻", 0);
        }
        return 0;
    }
    
    #include <Windows.h>
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmd, int nCmdShow) {
        //HWND hwnd = FindWindow("DSUI:PDFXCViewer", NULL);
        MessageBox(NULL, "test", "test", MB_YESNOCANCEL | MB_ICONWARNING);
        return 0;
    }
    
    FindWindow

    在某个窗口下的消息窗口,查找方法为:第一个参数为类型名,第二个为标题名

    #include <Windows.h>
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmd, int nCmdShow) {
        HWND hwnd = FindWindow(NULL, "hw11 - PDF-XChange Viewer");
        MessageBox(hwnd, "test", "test", 0);
        return 0;
    }
    
    DialogBox
    #include <Windows.h>
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmd, int nCmdShow) {
        HWND hwnd = FindWindow("DSUI:PDFXCViewer", NULL);
        MessageBox(hwnd, "test", "test", 0);
        return 0;
    }
    
    #include <Windows.h>
    #include "resource.h"
    
    INT_PTR CALLBACK theProc(HWND hwndDlg, UINT uMSG,WPARAM wParam,LPARAM lParm) {
        //消息回调函数,umsg为消息种类,WPARAM,LPARAM为消息内容
        switch (uMSG) {
        case WM_COMMAND:
            if (LOWORD(wParam) == IDOK) {
                int nLeft = GetDlgItemInt(hwndDlg, IDC_LEFT, NULL, TRUE);
                int nRight = GetDlgItemInt(hwndDlg, IDC_RIGHT, NULL, TRUE);
                SetDlgItemInt(hwndDlg, IDC_RESULT, nLeft + nRight, TRUE);
                //最后一个参数代表是否支持负数
            }
            if (LOWORD(wParam) == IDCANCEL) {
                EndDialog(hwndDlg, IDCANCEL);
            }
        }
        return 0;
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmd, int nCmdShow) {
        //从一个资源模板中创建一个模式对话框
        DialogBox(hInstance, (LPCTSTR)IDD_MAIN_DLG, NULL, theProc);
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:C++

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