
c++学习
胡默
这个作者很懒,什么都没留下…
展开
-
C++(7)- 委托相关设计
设计模式composite温习:static的主要使用情况:1、static方法static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。但是要注意的是,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态原创 2020-08-21 11:16:33 · 192 阅读 · 0 评论 -
C++(6)-虚函数(与继承搭配)
继承with virtual functions非虚函数:不希望子类重新定义(override)它;虚函数:希望子类可以重新定义它,并且你已经有一个默认的定义了—子类可以自己重新定义,也可以不定义纯虚函数:希望子类 一定 要重新定义它,你对它没有默认定义**纯虚函数draw() :**你们继承之后,必须重新自己定义一个draw(),因为我不知道该怎么画,你们自己画自己搞。设计模式Template MethodMFC可以在多年之后,框架依旧可以用,很健壮性啊上图注意this指针的意义,原创 2020-08-21 10:29:16 · 194 阅读 · 0 评论 -
C++(5)组合与继承
所有的功能已经在deque中完成了,而我queue只是想借用一下deque中的功能设计模式:AdapterComposition关系下的构造和析构delegation 委托(Composition by reference)StringRep* rep;只是一个接口,不需要关怎么实现,实现的事情由StringRep类在外部去做这样灵活,右边怎么变动都不影响左边,指针可以是指向其他的类,这样的手法称为编译防火墙inheritance 继承 is-a最有价值的部分是和虚函数搭配使用继承关.原创 2020-08-20 22:26:59 · 158 阅读 · 0 评论 -
C++(4)- 类模板,函数模板
补充static 声明一个变量为static object,则必须赋初值调用static函数的方式有两种:通过object调用通过class name 调用一个简单的设计模式:(把创建的一个对象放在private里)class template 类模板template<typename T>class A{ T a;//T为数据类型}//用法A<int> c;A<double> d;//用int double去替换Tfuncti原创 2020-08-20 21:07:09 · 161 阅读 · 0 评论 -
C++(3)- 栈、堆、内存块
Stack存在于某作用域(scope)的一块内存空间,例如当你调用函数,函数本身会形成一个stack用来放置它所接收的参数以及返回地址。 在函数本体内声明的任何变量,其所使用的内存块都取自stackHeap是指由操作系统提供的一块global 内存空间,程序可动态分配从中获得若干区块class Complex{.....};...{ Complex c1(1,2);//第一行 Complex* p = new Complex(3);//第二行}上述代码第一行c1所占用空间来自stac原创 2020-08-20 20:37:07 · 244 阅读 · 1 评论 -
C++(2)- 拷贝构造、拷贝复制、析构
析构函数如果进行了动态分配,析构函数中必须得清楚掉分配的内存,不然会造成内存泄漏拷贝构造拷贝构造函数,与构造函数不同的是。传入值的类型是它自己const String& str。拷贝赋值函数同理,传入的是与自己同类型的参数。inline String::String(const String& str){ m_data = new char[strlen(Str.m_data)+1]; strcpy(m_data,str.m_data);}如上代码所作的操作为深拷贝原创 2020-08-19 22:18:36 · 209 阅读 · 0 评论 -
游戏开发第二站之C++(1)
防卫式声明:在一个头文件中,往往很少有人(小白初学者)编写头文件时加入防卫式声明,如complex.hcomplex.h#ifndef _COMPLEX_#define _COMPLEX_~~~~~~~~~~~~~~~~~~~~ //头文件主体~~~~~~~~~~~~~~~~~~~~#endif在预编译阶段,编译器会把.h文件展开。防卫式声明的作用是:防止由于同一个头文件被包含多次,而导致了重复定义。 参考:防卫式声明函数若在class body内定义则是inline候.原创 2020-08-17 21:39:39 · 157 阅读 · 0 评论 -
OpenGL(5)Texture - 两张图片
为了能够让笑脸图片重叠到箱子图片上做如下修改:fragmentSource.txt#version 330 core in vec4 vertexColor; in vec2 TexCoord;uniform sampler2D ourTexture;uniform sampler2D ourFace; //加入第二张图片out vec4 FragColor; void main(){ // FragColor = vert原创 2020-08-11 10:40:43 · 1211 阅读 · 0 评论 -
OpenGL(5)Texture - 箱子
1. 下载stb_image.h编写格式(在main.cpp中):#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"2.修改着色器vertexSource.txt#version 330 core layout (location = 7) in vec3 aPos; layout (location = 8) in vec3 aColor; layout (location = 9) in vec原创 2020-08-10 17:29:41 · 553 阅读 · 0 评论 -
OpenGL(4)着色器 - 错误排查
Shader.h 中声明新函数:private: void checkCompileErrors(unsigned int ID, std::string type);Shader.cpp 中定义新函数:void Shader::checkCompileErrors(unsigned int ID, std::string type){ int success; char infolog[512]; if (type != "PROGRAM") { glGetShaderiv(ID,原创 2020-08-10 10:45:42 · 1093 阅读 · 0 评论 -
OpenGL(4)着色器 - 着色器的编写
main函数#define GLEW_STATIC#include<iostream>#include<GL/glew.h>//#include<glad/glad.h>#include<GLFW/glfw3.h>#include"Shader.h"//现在直接在顶点数据里加入颜色信息float vertices[] = {-0.5f, -0.5f, 0.0f,1.0f,0.0f,0.0f,//右上角0 0.5f, -0.5f,原创 2020-08-09 17:19:32 · 532 阅读 · 0 评论 -
OpenGL(4) 着色器 - 着色器文档的读入
新加项Shader.h#pragma once#include<string>class Shader{public: Shader(); Shader(const char * vertexPath, const char * fragmentPath); //cpu中的string 和 char* std::string vertexString; std::string fragmentString; const char* vertexSource; con.原创 2020-08-09 16:40:42 · 393 阅读 · 0 评论 -
OpenGL(3)着色器 - 顶点加入颜色信息插值绘制
修改部分:着色器中定义颜色信息:const char* vertexShadersource ="#version 330 core \n""layout (location = 7) in vec3 aPos; \n""layout (location = 8) in vec3 aColor; \n" //加入颜色属性位置是8;"out vec4 vertexColor; \n" //在 vertexShadersource 中定义并输出到fragment原创 2020-08-08 22:13:08 · 1415 阅读 · 0 评论 -
OpenGL三角形(2)-闪烁功能
重点部分:在顶点着色器中定义一个out扔到片段着色器中(in),片段着色器将顶点着色器中vertexColor的值赋给每一个像素;#mermaid-svg-DlLweXvQF1RV2pxB .label { font-family: 'trebuchet ms', verdana, arial; font-family: var(--mermaid-font-family); fill: #333; color: #333; }#mermaid-svg-DlLweXvQF1R原创 2020-08-05 16:26:58 · 444 阅读 · 0 评论 -
游戏开发第一站之OpenGL(1)
OpenGL三角形绘制具体流程:版本号初始化glew将着色器附加到程序对象上初始化窗口创建窗口定义VBO VAO EBO创建着色器并编译创建程序对象绘制#define GLEW_STATIC#include<iostream>#include<GL/glew.h>//#include<glad/glad.h>#include<GLFW/glfw3.h>float vertices[] = {-0.5f, -0.5f, 0.0f,原创 2020-08-04 17:16:23 · 355 阅读 · 0 评论 -
c++学习第一天
清华大学郑莉老师c++面向对象的方法将数据及对数据的操作方法封装在一起作为一个相互依存、不可分离的整体————对象对同类型对象抽象出器共性,形成类类通过一个简单的外部接口,与外界发生关系对象与对象之间通过消息进行通信简单的来说,c++中的类形似 c 语言中的struct结构体,它们都可以看作是一种复杂的数据类型,而对象就是被装在类(class)中的的东西像变量,函数这些统一起来的一个整...原创 2019-11-28 21:53:17 · 179 阅读 · 0 评论