Qt教程一(三)

简介: Qt教程一(三)

Qt教程一(三)


6.需要的C++知识

1.什么是C++

C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。

2.如何定义一个类

class Animal
{
public:
    Animal(const std::string& name,int age)
        :name(name),age(age)
    {
    }
    void cry()
    {
        std::cout<<name<<" "<<age<<" "<<u8"Animal cry"<<std::endl;
    }
private:
    std::string name;
    int age;
};

3.什么是对象,如何定义?

对象是类的实例化

Animal cat("猫",5);
Animal *dog = new Animal("dog",3);
delete dog;

4.如何访问类的成员变量

普通变量通过" . “,指针变量通过” -> "

cat.cry();
dog->cry();

5.类的函数成员

一:在类里面声明

二:实现这个函数,我们可以直接在类的里面写,也可以写在类的外面。

class Animal
{
public:
    Animal(const std::string& name,int age);
    void cry();
private:
    std::string name;
    int age;
};
Animal::Animal(const std::string& name,int age)
        :name(name),age(age)
{}
void Animal::cry()
{
    std::cout<<name<<" "<<age<<" "<<u8"Animal cry"<<std::endl;
}

6.类函数的重载特性

C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。不能只有函数返回值类型不同。

class Animal
{
public:
  ...
    void cry()
    {
        std::cout<<name<<" "<<age<<" "<<u8"Animal cry"<<std::endl;
    }
    void cry(int count)
    {
        for(int i=0;i<count;i++)
        {
            std::cout<<i<<"->"<<name<<" "<<age<<" "<<u8"Animal cry"<<std::endl;
        }
    }
private:
  ...
};

7.构造函数和析构函数

构造函数:定义对象时会调用构造函数

析构函数:生命周期结束或者释放对象时,会调用析构函数

特点

构造函数和析构函数的函数名和类名一样,能够重载;没有返回类型申明

析构函数在名字前面加~,析构函数不能被重载;没有返回类型申明

匿名对象

深、浅拷贝

移动语义

8.类的继承

类的继承允许我们在新的类里面继承父类的public和protected部分。

class Snake:public Animal
{
public:
    using Animal::Animal;
    Snake(int age)
        :Animal("snake",age)
    {
    }
};

9.虚函数和纯虚函数

虚函数:有实际定义的,允许派生类对他进行覆盖式的替换,virtual修饰。

纯虚函数:没有实际定义的虚函数就是纯虚函数,子类必须自己实现。

虚函数的优点是可以预留接口(API)。

10.lambda表达式

Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。

基本语法:

[capture list] (parameter list)mutable/noexcept -> return type { function body }
/*
capture list    参数捕获列表
parameter list    形参列表(可省略)
mutable/noexcept  选项    (可省略)
  ·mutable  可以修改按值传递进来的拷贝(注意是能修改拷贝,而不是值本身)
  ·noexcept 表示函数不抛异常
-> return type    尾置返回类型(可省略)
function body   函数体
*/

capture list 参数捕获列表

[] 不捕捉任何变量

[&] 捕获外部作用域中所有变量, 并作为引用在函数体内使用 (按引用捕获)

[=] 捕获外部作用域中所有变量, 并作为副本在函数体内使用 (按值捕获)

拷贝的副本在匿名函数体内部是只读的

[=, &foo] 按值捕获外部作用域中所有变量, 并按照引用捕获外部变量 foo

[bar] 按值捕获 bar 变量, 同时不捕获其他变量

[&bar] 按值捕获 bar 变量, 同时不捕获其他变量

[this] 捕获当前类中的this指针

让lambda表达式拥有和当前类成员函数同样的访问权限

如果已经使用了 & 或者 =, 默认添加此选项

parameter list 形参列表(可省略)

mutable/noexcept 选项 (可省略)

mutable 可以修改按值传递进来的拷贝(注意是能修改拷贝,而不是值本身)

noexcept 表示函数不抛异常

-> return type 尾置返回类型(可省略)

function body 函数体

目录
相关文章
|
4月前
|
存储 缓存 自然语言处理
QT基础教程(QMap和QHash)
QT基础教程(QMap和QHash)
471 0
|
3月前
|
IDE 开发工具 数据安全/隐私保护
【干货】Qt Creator快速下载、安装、使用教程
【干货】Qt Creator快速下载、安装、使用教程
601 2
|
4月前
|
数据可视化 算法 C++
C++ cmake工程引入qt6和Quick 教程
C++ cmake工程引入qt6和Quick 教程
300 0
|
4月前
|
编译器 C++ 开发者
QT基础教程(QT Creator工程介绍)
QT基础教程(QT Creator工程介绍)
66 1
|
4月前
|
开发框架 IDE 开发工具
QT基础教程(Hello QT)
QT基础教程(Hello QT)
132 1
|
4月前
|
数据可视化 计算机视觉
QT基础教程(图形处理)
QT基础教程(图形处理)
63 0
|
4月前
QT基础教程(文本绘制)
QT基础教程(文本绘制)
99 0
|
4月前
|
存储 数据处理 数据格式
QT基础教程(文件操作深入)
QT基础教程(文件操作深入)
81 0
|
4月前
|
编解码 区块链 Windows
QT基础教程(QPalette和QIcon)
QT基础教程(QPalette和QIcon)
102 0
|
4月前
|
存储
QT基础教程(QT中的文件操作)
QT基础教程(QT中的文件操作)
113 0