恋恋风辰的个人博客


  • Home

  • Archives

  • Categories

  • Tags

  • Search

Qt环境搭建

Posted on 2022-08-18 | In Qt

安装QtCreator

进入Qt官网https://www.qt.io/zh-cn/,点击下载按钮

https://cdn.llfc.club/20220818205558.png

然后选择试用Qt,这里下载的是免费版本,也就是社区版本,如果点击购买则下载专业版。

Read more »

C++虚函数表和类成员内存分布

Posted on 2022-07-31 | In C++

不可定义为虚函数的函数

类的静态函数和构造函数不可以定义为虚函数:
静态函数的目的是通过类名+函数名访问类的static变量,或者通过对象调用staic函数实现对static成员变量的读写,要求内存中只有一份数据。而虚函数在子类中重写,并且通过多态机制实现动态调用,在内存中需要保存不同的重写版本。

构造函数的作用是构造对象,而虚函数的调用是在对象已经构造完成,并且通过调用时动态绑定。动态绑定是因为每个类对象内部都有一个指针,指向虚函数表的首地址。而且虚函数,类的成员函数,static成员函数都不是存储在类对象中,而是在内存中只保留一份。

将析构函数定义为虚函数的作用

类的构造函数不能定义为虚函数,析构函数可以定义为虚函数,这样当我们delete一个指向子类对象的基类指针时可以达到调用子类析构函数的作用,从而动态释放内存。
如下我们先定义一个基类和子类

Read more »

C++ 一个例子说明类继承知识点

Posted on 2022-07-28 | In C++

基类实现

我们先实现一个基类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class BaseTest
{
private:
virtual void display() { cout << "Base display" << endl; }
void say() { cout << "Base say()" << endl; }

public:
virtual void func() { cout << "Base func()" << endl; }
void exec()
{
display();
say();
}
void f1(string a) { cout << "Base f1(string)" << endl; }
void f1(int a) { cout << "Base f1(int)" << endl; }

void exec2()
{
display();
say();
}
};
Read more »

模板特例化

Posted on 2022-07-24 | In C++

特例化介绍

模板特例化主要是用于在模板特定情况下的一些特殊定义,用来完善模板在特定情况的调用
我们先实现一个函数模板

Read more »

模拟实现vector

Posted on 2022-06-21 | In C++

模拟vector

我们可以通过模板实现类似vector的类。我们实现一个StrVecTemp类,其内部通过allocator开辟空间,存储的类型用T来表示,T是模板类型。

Read more »

模板类型的原样转发和可变参数

Posted on 2022-06-16 | In C++

原样转发的意义

前文我们实现了一个my_move函数,用来模拟stl的move操作,实现去引用的功能。其内部的原理就是通过remove_reference实现去引用操作。
有时我们也需要保留原类型的左值或者右值属性,进行原样转发,此时就要用forward实现转发功能。
我们先定义一个模板函数

Read more »

C++ 模板类的友元和折叠规则

Posted on 2022-06-15 | In C++

为模板类声明友元类

有时我们需要A类访问模板类B的私有成员,但是不想其他类访问,就要在模板类B里为A类声明友元。比如我们想要实现一个BlobPtr类,让BlobPtr类成为Blob类的友元,这样BlobPtr类就可以访问Blob类了。对于Blob类的声明和定义在前文已经阐述https://llfc.club/articlepage?id=28Vv7hro3VVMPDepLTlLRLqYJhJ。
我们省略Blob类的详细声明,只为它添加友元类BlobPtr类,并且为他添加友元函数operator==

Read more »

C++ 函数模板和类模板

Posted on 2022-04-30 | In C++

函数模板

当我们想要定义一个可以支持泛型的函数时,就要采用函数模板的方式了。所谓泛型就是可以支持多种类型的操作,比如我们定义一个compare操作,他可以根据传递给他的参数类型动态调用对应的函数版本,实现多种类型的比较。

1
2
3
4
5
6
7
8
9
template <typename T>
int compare(const T &v1, const T &v2)
{
if (v1 < v2)
return -1;
if (v2 < v1)
return 1;
return 0;
}
Read more »

C++ 类的继承封装和多态

Posted on 2022-04-28 | In C++

C++ 特性

C++ 三大特性,封装继承多态。我们先实现一个Quote作为基类

Read more »

C++ lambda和function

Posted on 2022-04-11 | In C++

lambda表达式

lambda表达式又称为匿名表达式,是C11提出的新语法。[]存储lambda表达式要捕获的值,()内的参数为形参,可供外部调用传值。lambda表达式可以直接调用

1
2
3
4
5
6
// 1  匿名调用
[](string name)
{
cout << "this is anonymous" << endl;
cout << "hello " << name << endl;
}("zack");
Read more »
<1…151617…37>

370 posts
17 categories
21 tags
RSS
GitHub ZhiHu
© 2025 恋恋风辰 本站总访问量次 | 本站访客数人
Powered by Hexo
|
Theme — NexT.Muse v5.1.3