赞
踩
用老罗来学UE蓝图:
https://zhuanlan.zhihu.com/p/135297007zhuanlan.zhihu.com再开个脑洞,用蓝图来类比学习C++基础知识。
C++ 刚开始学,所以本篇知识点不是特别全有些地方也可能不是特别准,望谅解,以后会慢慢补上。如有错误麻烦大佬们指出,感激不尽。
另:多少菜鸟的噩梦啊。
之前就是这样学习的,从书上提取知识点笔记记了一大堆,想着把书从薄读到厚,再从厚读到薄。
结果发现屁用都没有,该写程序的时候啥都不会,琐碎的知识点实在太多了。
所以:
Bjarne Stroustrup (来跟我一起唱,杯啊你 死招死咒噗~)唵嘛呢叭咪吽
它是在大佬头发郁郁葱葱的时候于1979年设计开发的,最初命名为带类的C,1983年更名为C++。C艹(四声、谢谢合作)对C进一步扩充和完善,而且随着时间发展会有不同的标准。
下面为五代标准。
你们这些大佬啊,再研究研究这就是你们以后的下场,标准发型!毫无回天之术 。
基类——class Shape ;(有宽高属性)
基类的对象—— Shape sha; (类只有一个,但是对象可以有很多个,如Shape sha1、Shape sha2)
派生类——class Rectangle : public Shape ;(继承自基类,新添加了计算面积函数,宽乘高就行了)
派生类的对象——Rectangle Rect;
【01】:Class类
对同一类对象的共同属性和行为进行概括,形成类。比如人类、动物类、植物类等。如常有的属性是 颜色、大小、高低、重量、年龄等。
【02】:Object对象
对象Object,它是类的实例,用来特定类,所以是对象,常常定义属性的值。
- #include <iostream>
- using namespace std;
-
- class Box
- {
- public:
- double length; // 长度
- double breadth; // 宽度
- double height; // 高度
- };
-
- int main()
- {
- Box Box1; // 声明 Box1 object对象,类型class为 Box
- // box 1 对象详述
- Box1.height = 5.0;
- Box1.length = 6.0;
- Box1.breadth = 7.0;
- // box 1 的体积
- volume = Box1.height * Box1.length * Box1.breadth;
- cout << "Box1 的体积:" << volume <<endl;
- return 0;
- }
-
可以结合一点玄学的东西。
https://zhuanlan.zhihu.com/p/72782575zhuanlan.zhihu.com有一个白马非马的故事,感兴趣的可以了解一下。
放在C++这里,白马是对象Object,马是类(动物类的子类),继承inherited自动物类。
高中生物学的 界门纲目科属种 也适用,大道都是相通的。
当然还有一个 ,他大舅他二舅都是他舅,高桌子低板头都是木头。
【03】跟UE4对比学习
对应UE4的话,就是:
编辑器右上角可以看到ParentClass,Class Settings中可以更改父类及相关属性。
我是这样类比的。
而拿材质来说的话,材质就是类,材质实例就是对象,一个定义变量属性,一个定义值。
宏是一种批量处理的称谓。
计算机科学里的宏是一钟抽象,它根据一系列预定义的规则替换一定的文本模式,解释器或编译器在遇到宏时会自动进行这一模式替换。
在程序编译时将宏名(#define XXX)替换成字符串的过程被称为 ”宏展开“。
它定义了一个范围,以避免调用多个库中出现的同名函数。
- #include <iostream>
- using namespace std;
-
- // 第一个命名空间
- namespace first_space{
- void func(){
- cout << "Inside first_space" << endl;
- }
- }
- // 第二个命名空间
- namespace second_space{
- void func(){
- cout << "Inside second_space" << endl;
- }
- }
- using namespace first_space; //使用第一个名称空间
- int main ()
- {
-
- // 调用第一个命名空间中的函数
- func();
-
- return 0;
类和对象分别对应了属性和值,而头文件和源文件分别对应了声明和实现。
公有成员在类的外部是可以Get 和 Set 的。
保护成员在派生类(子类)中是可以Get的。
私有成员变量或函数在类的外部是不可以访问的,只能够被本类成员(类内)和友元函数Get 。 (C++ 成员和类的默认访问修饰符是private,而BP蓝图默认访问修饰符是public)
- /*public*/
- class A{};
- class B: public A{};
-
- /*protected*/
- class A{};
- class B: protected A{};
-
- /*private*/
- class A{};
- class B: private A{};
对象不可以访问,意思就是把类拽到关卡中变成对象的时候,get 不了对象的变量。
【1】Constant常量
#define LENGTH 10
const int LENGTH=10;
【2】Array数组
int a[5];
声明5个类型为int的数字int b=a[0]
——通过索引访问数组的第一个元素(index=0)【3】Enum枚举
enum color{red,green=5,blue};
——索引从0开始,red值为0,green值为5,blue值为6enum color{red,green,blue}c; c=blue;
—— 变量类型为color的c,然后c被复制为三个颜色中的一个blue蓝色【4】String字符串
char str[n]="xxxxxxxx";
strcpy(a,b)
—— 把b的字符串复制给astrcat(a,b)
—— 连接a b 字符串 为已有类型取一个新名字,如用int声明整数换成用a声明整数
- typedef int a;
- a shit= 0 ;
存储类定义C++程序变量/函数的范围(Visibility)和生命周期(lifetime)
【1】Static
【2】Extern
没啥说的了,看老罗BP吧。相关的循环语句条件语句蓝图版在老罗那篇。
- int a; //&a表示地址
- cout<< &a<<endl;
-
- int *a=5; //声明一个指针
- cout<<a<<endl; // 输出地址
- int *ptr=NULL;
- cout<<ptr<<endl;
- // 输出地址值 00000000
int32表示32位的整数,而1byte=8bit,所以它占用4个字节,对应内存地址就类似这样,1000递增变1004;而char字符占用1个字节,地址 1000递增变1001
ptr++ (ptr--)
- //类内定义
- class Box
- {
- output funcname (input){}
- }
-
- //类外定义,中间加 类名和一个范围解析运算符 即可
- output Classname:: funcname (input)
::
双冒号 void如果是空的话,可以不用填写
- output funcname (input){}
-
- int main(){
- return 0;
- }
类似Construction Script构造脚本。
https://zhuanlan.zhihu.com/p/134279765zhuanlan.zhihu.com- // 不带参数
- class A
- {
- public:
- A(); // 声明构造函数
- };
-
- A::A(void){}; //定义构造函数
-
- //带参数
- class A
- {
- public:
- A(int len); // 声明构造函数
- };
-
- A::A(int len){}; //定义构造函数
- C::C(int a,int b,int c):X(a),Y(b),Z(c){}
-
- //等同于
- C::C(int a,int b,int c)
- {
- X=a;
- Y=b;
- Z=c;
- }
- class A{
- public:
- A(); //声明构造函数
- ~A(); //声明析构函数
- A::A(void){}; //定义构造函数
- A::~A(void){}; //定义析构函数
- classname(const classname &obj){}
- //其中 obj是一个对象引用
- A(const A &obj);
- class Box{
- public:
- friend void print(Box box); //定义友元函数
- };
-
- void print(Box box){}; //声明友元函数
-
- int main(){
- Box box;
- box.变量=n;// 访问对象中的变量
- print(box);
- }
【1】虚函数
【2】纯虚函数
virtual void func()=0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。