const类型变量 -------------------------------------- int i; const int *p; ------------------------------...26 27 //通过指针的方法:即可以通过指向一个变量地址的指针去指向它,然后通过*p1去间接的修改b的值。 28 //注意编译的时候会出现警告!我们忽略这个警告强行改!...warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers] 30 //警告...:赋值时从指针目标类型丢弃“const”限定符[-Wdiscarded-qualifiers] 31 32 //这就是在c语言中用常量的时候不用const了!...因为c++里面的const是个真的const,而c语言中的const只是在语法的角度不让你去赋值,实际上是假的。 37 //这是c语言本身存在的弱项。
在c程序中,我们可能经常会使用到指针之间的赋值。...原来还是const修订符搞的怪: 第一段代码中: cp是一个指向char类型的指针。...在ANSI C标准中,有这么一段: 两个操作数都是指向有限定符或无限定符的相容类型的指针,左边的指针所指向的类型必须具有右边的全部限定符。...也就是说: ccp是一个指向有const修饰符的指针,cp是一个指向没有const修饰符的指针。ccp中包含了cp的所有修饰符(其实cp就没啥修饰符),因此可以进行赋值。...这样,我们看一下面的代码: c是一个指向char类型指针的指针。 cc是一个指向const修饰符修饰的char类型的指针的指针。 cc 与 c指向的内容并不相同,因此无法进行赋值操作。
DO IF *s2++ == 0 THEN return(0); FI OD return(*--s1 - *s2); END // 复合赋值符号...b=-3 /* 从b中减去3 */ b= -3 /* 把-3赋给b */ valve=!...,这样它的值就可以赋值给它所对应的形参类型对象。...(该对象的类型不能含有限定符)。 说明:参数传递过程类似于赋值。所以除非一个类型为char ** 的值可以赋值给一个const char **类型的对象。否则肯定会产生一条诊断信息。...要使赋值形式合法,需要满足如下条件: 两个操作数都是指向有限定符或无限定符的相容类型的指针,左边指针所指向的类型必须具有右边指针指向类型的全部限定符。
一、const变量 1、限定符声明变量只能被读 const int i=5; int j=0; …… i=j; //非法,导致编译错误 j=i...常量 extern const int i; //合法 extern const int j=10; //非法,常量不可以被再次赋值 4、便于进行类型检查 用const...*/ char h=I; //没有错 char h=i; //编译警告,可能由于数的截短带来错误赋值。 ...二、const成员函数 任何不会修改数据成员的函数都应该声明为const类型。...以下程序中,类stack的成员函数GetCount仅用于计数,从逻辑上讲GetCount应当为const函数。编译器将指出GetCount函数中的错误。
} 拷贝构造函数会自动将每个非static成员依次拷贝到正在创建的对象中,其中内置类型会直接拷贝,数组会被逐元素地拷贝,类类型会调用拷贝构造函数来拷贝 拷贝初始化在我们认为发生了拷贝时会进行,例如等号赋值...,改变副本不会产生影响,通常操作是在构造函数中要先拷贝右侧的对象的成员到新副本,然后释放副本的指针部分,接着把右侧的指针部分赋值到左侧,最后返回本副本。...对象移动 很多时候发生拷贝的对象在拷贝后原值就被快速销毁掉了,此时如果我们使用移动可以大幅提高性能,移动操作的目的是解决对象资源所有权转移的问题 而且有些对象如流对象不允许拷贝,但是可以移动 C11中我们可以用容器来保存不可拷贝的类型只要这个类型支持移动...),由于我们要直接使用临时变量,这就打上了无用变量的标记,我们可以认为右值引用的目标对象都是将要被销毁且没有其他用户的,也就是右值引用可以自由使用其引用对象,也就我们可以从引用对象“窃取”状态,正是这个特性让我们可以移动那些不可拷贝的值...,例如我们不希望向一个右值赋值,C11增加了引用限定符,我们通过在参数列表后附加一个引用符&表示此函数的对象必须是可修改的左值,通过在参数列表后附加两个引用符&&表示此函数的对象必须是右值,这两个限定符可以放在
类的访问限定符及封装 访问限定符 在面向对象的编程中,封装是一个核心概念,它隐藏了对象的内部实现细节,只对外提供必要的接口。封装通过访问限定符来控制类成员的访问权限,从而实现数据的隐藏和保护。...访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止 4. 如果后面没有访问限定符,作用域就到 } 即类结束。...this指针的特性 1. this指针的类型:类类型* const,即成员函数中,不能给this指针赋值。 2....因此,我们应该始终避免通过空指针调用成员函数。 此外,一些编译器或编译器的优化设置可能会检测到这种潜在的未定义行为,并发出警告或错误。...例如,使用某些静态分析工具或编译器的更严格的警告级别可能会帮助识别这种问题。
[nm7jnxkrzp.png] 静态多态 我们以前说过的函数重载就是一个简单的静态多态,静态多态是编译器在编译期间完成的,编译器会根据实参类型来选择调用合适的函数,如果有合适的函数可以调用就调,没有的话就会发出警告或者报错...动态多态 动态多态:它是在程序运行时根据基类的引用(指针)指向的对象来确定自己具体该调用哪一个类的虚函数。 基类中必须包含虚函数,并且派生类中一定要对基类中的虚函数进行重写。 ...通过基类对象的指针或者引用调用虚函数,因为派生类对基类中的虚函数进行重写,使用派生类的虚函数替换相同偏移量位置的基类虚函数,如果派生类中新增加自己的虚函数,按照其在派生类中的声明次序,放在上述虚函数之后...)除外 (c)访问限定符可以不同 那么问题又来了,什么是协变? ...1)友元函数,它不是类的成员函数 2)全局函数 3)静态成员函数,它没有this指针 4)构造函数,拷贝构造函数,以及赋值运算符重载(可以但是一般不建议作为虚函数) 动态多态缺陷 降低了程序运行效率
,则 EVM 会创建一个新变量实例并将原始值类型的值复制到目标变量中。...更改原始或目标变量中的值不会影响另一个变量中的值。这两个变量将保持其独立的值,并且它们可以在其他变量不知道的情况下更改值。 2、引用类型 与值类型不同,引用类型不直接将其值存储在变量本身中。...Solidity 中的数组是从0开始计数的,所以此数组可以包含7个元素。变量a由 EVM 分配存储空间 0x123,该位置保存了指针值 0x456。该指针指向存储数组数据的实际内存位置。...引用传递 当引用类型变量被赋给另一个变量时,或者当引用类型变量作为参数传送给函数时,EVM 会创建一个新变量实例并将指针从原始变量复制到目标变量中。这被称为引用传递。这两个变量都指向相同的地址位置。...3、规则3 在默认情况下,在函数中声明的变量存储在内存数据位置。但是,有以下几点警告: 函数中的值类型变量的存储位置是内存,而引用类型变量的缺省位置是存储。
,其作用是确定类成员的访问属性 访问限定符的域:从该限定符到下一限定符 或 从该限定符到 } 即类结束。...2.在类中,如果函数声明和函数定义分离,函数定义要用域作用限定符。 2.类实例化出对象 类可以说一种模板,可以用来创建具有相同属性和方法的多个对象。...在C++11中又增添了2个默认成员函数,移动构造和移动赋值。 1.构造函数。...1.赋值重载规定必须重载为成员函数,原因是赋值运算符在类中不显式实现时,编译器会生成一份默认的,此时用户在类外再将赋值运算符重载为全局的,就和编译器生成的默认赋值运算符冲突了,故赋值运算符只能重载成成员函数...3.赋值重载函数的参数建议写成const 类型的引用,以此避免拷贝。同理,其返回值也建议写成类类型引用(有返回值是为了支持连续赋值)。
类只是一个类型,并不是一个实体,从类得到实体的过程就被称为类的实例化....//类只是声明 class A { public: int _a; }; int main() { A::_a = 1;//红色警告 } 为什么上面的代码中A::_a=1会报错呐?...即使成员变量使用了访问限定符public修饰,主函数中_a使用了域作用限定符A限定,但是因为这时候的 _a只是一种声明,声明的话就意味着此时并没有开辟空间,因此并不能存放数值1;就好比是类只是图纸,不能住人...this指针的特性: this指针的类型:类类型* const,即成员函数中,不能给this指针赋值。...)的地址,在C++中,为了解决这样一个规律性的东西就设计出了this指针.
文章目录 面向对象和面向过程的初步认识 类的引入 类的定义 类的访问限定符及封装 访问限定符 封装 类的作用域 类的实例化 类对象模型 计算类的大小 类对象的存储方式 this指针 this指针的特性...访问限定符说明 1.public修饰的成员在类外可以直接被访问 2.protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的) 3.访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止...因为在进行赋值操作的时候我们经常会连续赋值如(a=b=c)这样的操作,其实这个连续赋值是从右往左进行的,也就是说其实是先将c赋值给b,在将b=c这个赋值表达式的返回值赋值给a,所以还是需要返回值。...注意:内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符重载完成赋值。...静态成员需要在全局定义并且要加上类访问限定符,此时不用再加static关键字: 一般来说在类外是无法访问到类中的成员变量的,不只是因为类域的原因再一个就是因为访问限定符的阻碍,但静态变量在定义的时候只需要标明域就可以打破访问限定符的限制
类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名 :: 类域 一般情况下 都会在变量一般都是加个前缀或者后缀标识区分就行 比如: 4.类的访问限定符及封装...protected 访问:在访问限定符的定义中,protected和private差不多,都可以理解为私有的,只能在类里面进行访问,不能进行修改。...访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止 4. 如果后面没有访问限定符,作用域就到 } 即类结束。...5. class的默认访问权限为private,struct为public(因为struct要兼容C) 注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别 C++ 中 class...8.2 this指针的特性 1. this指针的类型:类类型* const,即成员函数中,不能给this指针赋值。 2.
今日更新了类与对象的定义、访问限定符、this指针的内容 欢迎大家关注点赞收藏⭐️留言 面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题...是类似的) 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止 如果后面没有访问限定符,作用域就到}即类结束。...this指针的特性 this指针的类型:类类型* const,即成员函数中,不能给this指针赋值。...this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传 递,不需要用户传递 注意:this指针存在于栈中 下面是两道例题: 分析:题1中,因为Print函数在公共代码代码区...,不在对象中,因此p指针不解引用,可以正常运行。
访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止 4. 如果后面没有访问限定符,作用域就到 } 即类结束。...类的实例化 用类类型创建对象的过程,称为类的实例化 .this指针 C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数“增加了一个隐藏 的指针参数,让该指针指向当前对象...特性: 1. this指针的类型:类类型* const,即成员函数中,不能给this指针赋值。 2....赋值运算符重载格式 参数类型:const T&,传递引用可以提高传参效率 返回值类型:T&,返回引用可以提高返回的效率,有返回值目的是为了支持连续赋值 检测是否自己给自己赋值 返回*this :要复合连续赋值的含义...注 意:内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符 重载完成赋值。
2.继承定义 1.格式 2.继承关系和访问限定符 继承关系根据父类里各个限定符域以及规定好的继承方式来决定派生类能调用父类里的哪些成员变量。...基类private成员在派生类中是不能被访问,如果基类成员不想在类外直接被访问,但需要在派生类中能访问,就定义为protected。可以看出保护成员限定符是因继承才出现的。 3....一般都是使用public/protected方式进行继承 二.基类和派生类对象赋值转换 派生类对象可以赋值给基类的对象 / 基类的指针 / 基类的引用。这里有个形象的说法叫切片或者切割。...寓意把派生类中父类那部分切来赋值过去。 基类对象不能赋值给派生类对象。 基类的指针或者引用可以通过强制类型转换赋值给派生类的指针或者引用。但是必须是基类 的指针是指向派生类对象时才是安全的。...= pobj; // 3.基类的指针可以通过强制类型转换赋值给派生类的指针 pp = &sobj Student* ps1 = (Student*)pp; // 这种情况转换时可以的
67 4.4.1 默认类型指定符 68 4.4.2 缺失的声明器 69 4.4.3 类型限定符 70 4.4.4 const 70 4.4.5 volatile和序列点...字符类型 102 5.1.4 扩展整数类型 104 5.1.5 布尔类型 104 5.2 浮点类型 104 5.3 指针类型 108 5.3.1 通用指针 109 5.3.2... null指针和非法指针 109 5.3.3 使用指针的一些警告 110 5.4 数组类型 111 5.4.1 数组和指针 111 5.4.2 多维数组 112 5.4.3...152 6.2.8 转换为数组和函数类型 153 6.2.9 转换为void类型 153 6.3 寻常转换 154 6.3.1 类型转换 154 6.3.2 赋值转换 154... 内联函数 240 9.11 C++兼容性 242 9.11.1 原型 242 9.11.2 形参和返回类型中的类型声明 242 9.11.3 返回类型的一致 242 9.11.4
=运算符的结合律是从右往左,即将右边的表达式算完后赋值给左边 其他运算符 sizeof运算符以字节为单位返回运算对象的大小,返回类型是size_t(可使用printf()函数配合转换说明符%zd,...之所以short和char类型没有列出,是因为它们已经被升级为int或者unsigned int 2.待赋值的值与目标类型不匹配时 目标类型是无符号整形,且待赋的值是整数时,额外的位直接被忽略。...例如目标类型是8位的unsigned char,待赋的值是原始值求模256 如果目标类型是一个有符号整形,且待赋的值时整数,结果因实现而异 目标类型是一个整形,且待赋的值是浮点数时,该行为是未定义的 3...()如果读取到换行符,会丢弃掉而不是存储它 gets_s()读到最大字符数都没有读到换行符,会执行以下几步:首先把目标数组中的首字符设置成空字符,读取并丢弃随后的输入直至读到换行符或文件结尾,然后返回空指针...()函数,可以将整个字符串从临时数组拷贝到目标数组。
矩阵可以从多个向量参数构造,e.g. mat2 可以从两个vec2构造 矩阵可以从多个标量参数构造——每个参数代表矩阵中的一个值,从左到右使用。...下标从0开始。...常数变量是着色器中不变的值。 用 const 限定符修饰。 常量必须在 声明时 初始化。 常量是只读的。和 C 和 C++ 中一样。...运算符类型 D描述 +、-、 *、 /、% 加、减、乘、除、取模 ++, – 递增 递减 =、 +=,-=,*=,/= 赋值 以及 算术 赋值 ==,!...顶点和片段着色器 输入变量不能有布局限定符。OpenGL ES实现自动选择位置。 OpenGL ES 着色语言中另一个特殊变量类型是 顶点输入变量。
访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止,如果后面没有访问限定符,作用域就到}即类结束。...类中可以访问所有成员变量和其他成员函数,无论它们被什么访问限定符修饰。...实例化 2. 1 实例化概念 用类类型在物理内存中创建对象的过程,称为类实例化出对象。...C++使用了一个隐含的this指针解决这个问题。 编译器编译后,类的成员函数默认都会在形参第一个位置,增加一个当前类类型的指针,叫做this指针。...类的成员函数中访问成员变量,本质都是通过this指针访问的,如Init函数中给成员变量_year赋值 _year=year,实际上是this->_year = year; C++规定不能在实参和形参的位置显示的写
C++兼容C的,所以C中的结构体在C++中也能用,但是C++把结构体升级成了类,也就是说: 1.在C语言中 struct +名称,才表示一个自定义类型,如果想要直接用我们定义的名字,不加struct...访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止; 2....注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别 四.类对象模型 A.类的存储方式 类的成员变量存储在类中 类的成员函数存储在一个公共代码区 B.类的大小计算 遵循结构体的内存对齐规则...即:this 指针是隐式的,this不能在形参和实参显示传递,但是可以在函数内部显示使用 例如这样访问也是可以的 但this指针作为参数写出来就不行 特性 1. this指针的类型:类类型...* const,即成员函数中,不能给this指针赋值; 2.
领取专属 10元无门槛券
手把手带您无忧上云