
C++语法
猪葛大李
stay_hungry stay_foolish
展开
-
C++基类和派生类的类型转换
一、类型转换 公有派生类对象可以被当作基类的对象使用,反之则不可。派生类的对象可以隐含转换为基类对象;派生类的对象可以初始化基类的引用;派生类的指针可以隐含转换为基类指针。 通过基类对象名、指针只能使用从基类继承的成员。二、类型转换举例#include <iostream>using namespace std;// 定义类Aclass A{private: int m_a;public: cout << "A::func()" <<原创 2021-02-05 16:29:53 · 561 阅读 · 0 评论 -
C++继承和派生
一、继承与派生概述继承和派生是同一过程从不同角度看保持已有类的特性而构造新类的过程称为继承。在已有类的基础上新增自己的特性而产生新类的过程称为派生。被继承的已有类称为基类(或父类)。派生出的新类称为派生类(或子类)。直接参与派生出某类的基类称为直接基类。基类的基类甚至更高层的基类称为间接基类。继承的目的:实现设计和代码的重用。派生的目的:当新的问题出现,原有程序无法解决(或不能完全解决)时,需要对原有程序进行改造。二、单继承时派生类的定义语法:class 派生类名:继承方式原创 2021-02-04 22:29:10 · 288 阅读 · 0 评论 -
C++ string类
一、string类常用的构造函数string(); // 默认构造函数,建立一个长度为0的串。 string s1;string(const char *s); // 用指针s所指向的字符串常量初始化string对象。 string s2 = "abc";string(const string& rhs); // 复制构造函数。 string s3 = s2;二、string类常用操作s + t 将串s和t连接成一个新串s = t 用t更新ss == t 判断s与原创 2021-02-04 10:32:56 · 199 阅读 · 0 评论 -
C++深拷贝与浅拷贝(深层复制与浅层复制)
一、浅层复制实现对象间数据元素的一一对应复制。pointsArray1:对象points_size:指针数据成员,指向new出来的动态空间pointArray2:用pointsArray1初始化的对象,发生一次复制构造(浅层复制)当pointArray1析构delete之后,pointArray2析构的时候会发生错误。因为对同一块空间进行了两次delete二、深层复制当被复制的对象数据成员是指针类型时,不是复制该指针成员本身,而是将指针所指对象进行复制。在利用pointsArray1对象对原创 2021-02-03 20:10:05 · 1575 阅读 · 0 评论 -
C++ vector对象
一、为什么需要vector?封装任何类型的动态数组,自动创建和删除。数组下标越界检查。二、vector对象的定义vector<元素类型> 数组对象名(数组长度)vector<int> arr(5) // 建立大小为5的int数组三、vector对象的使用 对数组元素的引用与普通数组具有相同形式:vector对象名[下表表达式]vector数组对象名不表示数组首地址 获得数组长度用size长度vector对象名.size()四、基于范围的for循原创 2021-02-03 19:38:31 · 187 阅读 · 0 评论 -
C++共享数据的保护
一、常类型常对象:必须进行初始化,不能被更新。const 类名 对象名;常成员:用const进行修饰的类成员——常数据成员和常函数成员。const 类型说明符 &引用名;常数组:数组元素不能被更新类型说明符 const 数组名[大小]常指针:指向常量的指针。二、常对象用const修饰的对象。例:class A{public: A(int i, intj) { x = i; y = j; }private: int x, y;};A const原创 2021-02-03 13:57:48 · 126 阅读 · 0 评论 -
C++友元
一、类的友元友元是C++提供的一种破坏数据封装和数据隐藏的机制。(效率和隐藏之间做平衡)通过将一个模块声明为另一个模块的友元,一个模块能够引用到另一个模块中本是被隐藏的信息。可以声明友元 函数和友元类。为了确保数据的完整性,及数据封装与隐藏的原则,建议慎用友元。二、友元函数友元函数是在类声明中由关键字friend修饰说明的非成员函数,在它的函数体中能够通过对象访问private和protected成员。作用:增加灵活性,使程序员可以在封装和快速性方面做合理选择。访问对象中的成员必须通过原创 2021-02-03 11:27:44 · 367 阅读 · 4 评论 -
C++结构体、联合体、枚举类
结构体是一种特殊形态的类。与类唯一的区别: 类的缺省访问权限是private,结构体的缺省访问权限是public结构体中可以有数据成员和函数成员结构体的初始化如果:一个结构体的全部数据成员都是公共成员;没有用户定义的构造函数;没有基类和虚函数这个结构体的变量可以用下面的语法形式初始化:类型名 变量名 = {成员数据1初值, 成员数据2初值,......};...原创 2021-02-02 22:04:17 · 191 阅读 · 0 评论 -
C++类的组合
一、类组合的构造函数设计原则:不仅要负责对本类中的基本类型成员数据初始化,也要对对象成员初始化。声明形式:类名::类名(对象成员所需的形参,本类成员形参): 对象1(参数),对象2(参数),......{ //函数体其他语句}二、构造组合类对象时的初始化次序首先对构造函数初始化列表中列出的成员(包括基本类型成员和对象成员)进行初始化,初始化次序是成员在类体中定义的次序。 成员对象构造函数调用顺序:按对象成员的定义顺序,先声明者先构造。 初始化列表中未出现的成员对象,调用默认构造原创 2021-02-02 21:58:02 · 239 阅读 · 0 评论 -
C++析构函数
一、析构函数语法析构函数的原型 ~类名();析构函数没有参数,没有返回类型二、析构函数完成对象被删除前的一些清理工作。三、在对象的生存期结束的时刻系统自动调用析构函数。四、如果程序中未声明析构函数,编译器将自动产生一个默认的析构函数,其函数体为空。...原创 2021-02-02 21:34:46 · 271 阅读 · 0 评论 -
C++复制构造函数(拷贝构造函数)
一、复制构造函数定义复制构造函数是一种特殊的构造函数,其形参为本类的对象引用。作用是用一个已知的对象去初始化同类型的新对象。class 类名{public: 类型(形参);//构造函数 类名(const 类名 &对象名);//复制构造函数//...};类名::类(const 类名 &对象名)//复制构造函数的实现{ 函数体 }二、复制构造函数被调用的三种情况定义一个对象时,以本类另一个对象作为初始值,发生复制构造;如果函数的形参是类的对象,调用函数时,将使用原创 2021-02-02 21:25:43 · 2142 阅读 · 2 评论 -
C++委托构造函数
委托构造函数使用类的其他构造函数执行初始化过程。对于同一个类中构造函数的重载,有些时候可以调用另一个已实现的构造函数来简化代码,调用其他构造函数来实现的构造函数就叫做委托构造函数。例:Clock类的两个构造函数:Clock(int newH, int newM, int newS): hour(newH), minute(newH), second(newS){ //构造函数}Clock():hour(0), minute(0), second(0){} //默认构造函数上面的默认构造函原创 2021-01-31 20:12:58 · 208 阅读 · 0 评论 -
C++构造函数
问题:当我们定义对象的时候,如何初始化(对对象成员进行赋值)?类是我们自定义的类型,按照什么规则进行初始化,编译器是不知道的,这件事需要我们自己编写构造函数描述初始化的算法。一、构造函数的作用在对象被创建时使用特定的值构造对象,将对象初始化为一个特定的初始状态。例如:希望在构造一个Clock类对象时,将初始时间设置为0:0:0,就可以通过构造函数来设置。二、构造函数的形式函数名与类名相同不能定义返回值类型,也不能有return语句可以有形式参数,也可以没有形式参数可以是内联函数可以原创 2021-01-31 18:59:13 · 164 阅读 · 0 评论 -
C++类和对象的定义
设计 类 就是 设计 类型此类型的“合法值”是什么?此类型应该有什么样的函数和操作符?新类型的对象该如何被创建和销毁?如何进行对象的初始化和赋值?对象作为函数的参数如何以值传递?谁将使用此类型的对象成员?一、类定义的语法形式class 类名称{public: 公有成员(外部接口)private: 私有成员protected: 保护型成员};设置类内初始值,如果构造函数没有初始化,则会采用内类初始值:class Clock{public: void showTi原创 2021-01-31 18:31:43 · 449 阅读 · 0 评论 -
C++面向对象程序的基本特点
一、抽象对同一类对象的共同属性和行为进行概括,形成类。首先注意问题的本质和描述,其次是实现的过程和细节。数据抽象:描述某类对象的属性和状态(对象相互区别的物理量)。代码抽象:描述某类对象的共有的行为特征或具有的功能。抽象的实现:类二、封装将抽象出的数据、代码封装在一起,将他们视为一个整体。目的:增强安全性和简化编程,使用者不必了解具体的实现细节,二只需要通过外部接口,以特定的访问权限,来使用类的成员。实现封装:类声明中的 { }三、继承在已有类的基础上,进行扩展形成新的类。四原创 2021-01-31 14:13:06 · 187 阅读 · 0 评论 -
C++函数重载
函数重载是由静态多态机制实现的,也就是说这种多态性是在编译阶段实现的。例:int abs(int x){ return x < 0 ? -x : x;}double abs(double x){ return x < 0 ? -x : x;}这两个求绝对值的函数,函数名相同,在C语言中编译器会报语法错误,但是C++允许功能相近的函数在相同的作用域内以相同的函数名声明,从而形成重载。方便使用,便于记忆。编译器区分重载函数的因素:重载函数的形参必须不同。形参类型不同:原创 2021-01-31 13:51:53 · 458 阅读 · 0 评论 -
C++带默认参数值的函数
一、可以预先设置默认的参数值,调用时如果给出实参,则采用实参值,否则使用预先设置的默认参数值。int add(int x = 5, int y = 6){ return x + y;}int main(){ add(10, 20); // 10+20 add(10); // 10+6 add(); // 5+6}二、默认参数值的说明次序有默认参数的形参必须列在形参列表的最右,即默认参数值的右面不能无默认值的参数;调用是实参与形参的结合次序是从左向右。例:int add(i原创 2021-01-31 13:33:40 · 318 阅读 · 0 评论 -
C++引用类型
一、引用类型引用(&)是标识符的别名定义一个引用时,必须同时对它进行初始化,使它指向一个已存在的对象例如:int i, j;int &ri = i; // 定义int引用ri,并初始化为变量i的引用j = 10;ri = j; // 相当于i = j一旦一个引用被初始化后,就不能改为指向其他对象引用可以作为形参(函数形实结合的时候引用才被定义,同时被初始化)二、引用的本质引用的本质是一个指针常量。首先引用是一个常量,所以必须在定义的时候被初始化。编译器内部处理原创 2021-01-31 13:06:26 · 1233 阅读 · 0 评论 -
C++ primer读书笔记(一)——变量和基本类型
一、为什么设计数据类型?数据类型决定了程序中数据和操作的意义。数据的意义:在不同的应用场景下,变量需要占用不同大小的内存空间,布局方式和该空间能储存的值的范围,这些不同由数据类型体现;操作的意义:两个整数相加和两个对象相加的算法是不一样的,这个不一样由数据类型体现。二、C++输出没有占位符,用什么数据类型来解析?unsigned u = 10;int i = -42;std::cout << i + i << endl; //输出 -84std::cout <<原创 2020-08-09 01:49:42 · 118 阅读 · 0 评论