随笔分类 - 2-C++深度解析教程
摘要:1. 字符串类的兼容性 (1)string类最大限度的考虑了C字符串的兼容性 (2)可以按照使用C字符串的方式使用string对象 string s = "abcedefg"; char c = s[i]; 【编程实验】用C方式使用string类 34-1.cpp #include <iostrea
阅读全文
摘要:1. 历史遗留问题及解决方案 (1)历史遗留问题 ①C语言不支持真正意义上的字符串 ②C语言用字符数组和一组函数实现字符串操作 ③C语言不支持自定义类型,因此无法获得字符串类型 (2)解决方案 ①从C到C++的进化过程引入了自定义类型 ②在C++中可以通过类完成字符串类型的定义 2. 标准库中的字符
阅读全文
摘要:1. 有趣的重载 (1)操作符<<:原义是按位左移,重载“<<”可将变量或常量左移到对象中 【编程实验】重载左移操作符(仿cout类) 32-1.cpp #include <stdio.h> const char endl = '\n'; class Console { public: Consol
阅读全文
摘要:1. 复数类应具有的操作 (1)运算:+、-、*、/ (2)比较:==、!= (3)赋值:= (4)求模:modulus 2. 利用操作符重载 (1)统一复数与实数的运算方式 Complex operator + (const Complex& c); Complex operator - (con
阅读全文
摘要:1. 复数类需要解决的问题 ——下面的复数解决方案是否可行? 不可行,+ 操作符只提供对C++ 基本数据类型的运算,不支持类的相加运算。 【编程实验】复数的加法操作 30-1.cpp #include <stdio.h> class Complex { int a; int b; public: C
阅读全文
摘要:1. 函数重载的回顾 (1)函数重载的本质为相互独立的不同函数 (2)C++中通过函数名和函数参数确定函数调用,函数名和参数列表组成唯一的标识 (3)无法直接通过函数名得到重载函数的入口地址 (4)函数重载必然发生在同一个作用域中 【编程实验】类成员函数指针 #include <iostream>
阅读全文
摘要:1. 友元的概念 (1)友元是C++中的一种关系,友元关系发生在函数与类之间或类与类之间 (2)友元关系是单项的,不能传递 class Point { double x; double y; friend void func(Point& p);//声明func为Point类的友元函数 } void
阅读全文
摘要:1. 构造函数的回顾 (1)关于构造函数 ①类的构造函数用于对象的初始化 ②构造函数与类同名并且没有返回值(思考:无返回值如何判断构造函数的执行结果?) ③构造函数在对象定义时自动被调用 (2)构造函数的真相 ①构造函数只提供自动初始化成员变量的机会,但不能保证初始化逻辑一定成功。它只能决定对象的初
阅读全文
摘要:1、未完成的需求 统计在程序运行期间某个类的对象数目 保证程序的安全性(不能使用全局变量) 随时可以获取当前对象的数目(Failure) 【编程实验】解决方案的尝试 26-1.cpp #include <stdio.h> class Test { public: static int cCount;
阅读全文
摘要:0.C语言的static关键字 https://www.cnblogs.com/hoiday/protected/p/9998577.html (1)static关键字指明变量的“静态”属性——static修饰的局部变量和全局变量存储在程序静态区(静态变量,只能被初始化一次) (2)static关键
阅读全文
摘要:1. 关于析构的疑问 (1)单个对象创建时构造函数的调用顺序 ①调用父类的构造函数(后续课程中讲解) ②调用成员变量的构造函数(调用顺序与声明顺序相同) ③调用类自身的构造函数 ▲析构函数与对应构造函数的调用顺序相反:即类自身的析构→成员变量→父类析构 (2)多个对象的析构:析构函数顺序与构造函数顺
阅读全文
摘要:1. 有趣的问题 (1)程序意图:在Test()中以0作为参数调用Test(int i)来将成员变量mi初始值设置为0. (2)运行结果:成员变量mi的值为随机值(没达到目的!) 【实例分析】有趣的问题 23-1.cpp #include <stdio.h> class Test { private
阅读全文
摘要:1. 对象的销毁 (1)对象的销毁 生活中的对象都是被初始化后才上市的(从而引入了构造函数) 生活中的对象被销毁前会做一些清理工作 (2)问题:C++中如何清理需要销毁的对象? 一般而言,需要销毁的对象都应该做清理 解决方案: 为每个类都提供一个public的free函数 对象不再需要时立即调用fr
阅读全文
摘要:1. 对象的构造顺序 ———C++中的类可以定义多个对象,那么对象构造顺序是怎样的? (1)对于局部对象:当程序执行流到达对象的定义语句时进行构造 (2)对于堆对象 ①当程序执行流到达new语句时创建对象 ②使用new创建对象将自动触发构造函数的调用 (3)对于全局对象 ①对象的构造顺序是不确定的
阅读全文
摘要:1. 类成员的初始化 (1)C++中提供了初始化列表,可以对类的成员变量进行初始化 (2)语法规则: ClassName::ClassName():m1(v1), m2(v2,v3),m3(v3) { //其它初始化操作 } (3)注意事项 ①成员的初始化顺序与成员的声明顺序相同。而与初始化列表中的
阅读全文
摘要:1. 两个特殊的构造函数 无参构造函数 拷贝构造函数 参数形式 没有参数的构造函数 参数为const class_name&的构造函数 默认情况 当类中没有定义构造函数时,编译器默认提供一个无参构造函数,并且其函数体为空 当类中没有定义拷贝构造函数时,编译器默认提供一个拷贝构造函数,简单的进行成员变
阅读全文
摘要:1. 带参数的构造函数 (1)构造函数可以根据需要定义参数 (2)一个类中可以存在多个重载的构造函数 (3)构造函数的重载遵循C++重载规则 【友情提示】对象的定义和声明不同 ①对象定义:申请对象的内存空间并调用构造函数(如Test t;//定义并调用构造函数) ②对象声明:告诉编译器己经存在一个对
阅读全文
摘要:1. 对象的初始化 (1)从程序设计的角度看,对象只是变量,因此: ①在栈上创建对象时,成员变量初始化为随机值 ②在堆上创建对象时,成员变量初始化为随机值 ③在静态存储区创建对象时,成员变量初始化为0值 【编程实验】成员变量的初始化 17-1.cpp #include <stdio.h> class
阅读全文
摘要:1. 类的关键字 (1)struct在C语言中己经有了自己的含义,必须继续兼容 (2)在C++中提供了新的关键字class用于类定义 (3)class和struct的用法完全相同 用struct定义的类中所有成员默认访问级别为public 用class定义的类中所有成员默认访问级别为private
阅读全文
摘要:1. 封装的基本概念 (1)类通常分为两个部分:类的实现细节、类的使用方式。 当使用类时,不需要关心其实现细节 当创建类时,才需要考虑其内部实现细节 (2)根据经验,并不是类的每个属性都是对外公开的,但一些属性是对外公开的。 (3)必须在类的表示法中定义属性和行为的公开级别:类似文件系统中文件的限制
阅读全文

浙公网安备 33010602011771号