随笔分类 - c++
摘要:图一 图二 先测试图一结构的多继承: 虚继承的目的是令某个类做出声明,承诺愿意共享它的基类。其中,共享的基类对象称为虚基类。在这种机制下,无论虚基类在继承体系中出现多少次,在派生类中都只包含唯一一个共享的虚基类对象。 为了说明情况,我们把上述代码更改如下: 1 #include<iostream>
阅读全文
摘要:上诉代码,如果直接使用子类对象调用子类的某个和父类同名函数或者使用同名变量,默认使用子类的,但我们可以加上域作用符强制使用父类的属性或者方法。 同名函数再探: 当且仅当对通过引用或者指针调用虚函数时,才会在运行时解析该调用,也只有在这种情况下对象的动态类型才有可能与静态类型不同。 一旦某个函数被声明
阅读全文
摘要:基类也叫父类,派生类也叫子类。 类之间的继承关系继承关系是类之间的父子关系。 继承关系的特点如下:A、 子类拥有父类的所有属性和行为B、 子类也是一种特殊的父类C、 子类对象可以当父类对象使用D、 子类中可以添加父类没有的属性和方法E、 子类对象可以直接初始化父类对象F、 子类对象可以直接赋值给父类
阅读全文
摘要:派生类必须通过使用类派生列表, 明确指出它是从哪个(哪些)基类继承而来的。类派生列表的形式是:首先是一个冒号,后面紧跟以逗号分隔的基类列表(可以多继承,但一般不使用多继承),其中每个基类前面可以有以下三种访问说明符中的一个:public,private,protectedd。 c++语言中,基类必须
阅读全文
摘要:在重载输出输入运算符的时候,只能采用全局函数的方式(因为我们不能在ostream和istream类中编写成员函数),这里才是友元函数真正的应用场景。对于输出运算符,主要负责打印对象的内容而非控制格式,输出运算符不应该打印换行符;对于输入运算符,必须处理可能失败的情况(通常处理输入失败为默认构造函数的
阅读全文
摘要:c++语言并不要求递增和递减运算符必须是类的成员,但是因为它们改变的正好是所操作对象的状态,所以建议将其设定为成员函数。(但下面的代码为了练习,还是分别采用成员函数和全局函数的方式实现) 业余实现代码: NOTE: 后置版本接受一个额外的参数(不被使用)int类型的参数(必须是int类型的)。当我们
阅读全文
摘要:根据不同重载方式有不同的调用方式。全局函数重载运算符,成员函数或者友元函数重载运算符。 重载运算符是具有特殊名字的函数,它由关键字operator和其后要定义的运算符共同组成。和其他函数一样,重载的运算符也包含返回类型、参数列表以及函数体。 重载运算符的参数数量应该与运算符作用的对象数量一样多,一元
阅读全文
摘要:类可以允许其他类或者函数访问它的私有成员,方法是令其他类或者函数成为它的友元。如果类想把一个函数或者类声明成它的友元,只需要增加一条以friend关键字开始的声明语句即可。 友元声明只能出现在类定义的内部,但是在类内出现的具体位置不限。友元不是类的成员也不受它所在区域访问控制级别的约束,一般来说,最
阅读全文
摘要:如果这个类需要一个析构函数,我们几乎可以肯定它也需要一个拷贝构造函数和一个拷贝赋值运算符。 如果一个类需要拷贝构造函数,几乎可以肯定它也需要一个拷贝赋值运算符,反之亦然。 然而,无论是需要拷贝构造函数还是需要拷贝赋值运算符都不必然意味着也同时需要析构函数。
阅读全文
摘要:summary: 非静态成员函数有this指针,这样的成员函数实现参数会比全局函数少一个,反之全局函数参数会比非静态成员函数多一个。c++中多使用引用更好。
阅读全文
摘要:1 #include 2 #include 3 using namespace std; 4 class Copy_construction { 5 public: 6 Copy_construction(int a,int b,int c) 7 { 8 this->a = a; 9 this->b = b; 10 ...
阅读全文
摘要:1.深/浅拷贝 编译器为我们提供的合成拷贝构造函数以及合成的拷贝赋值运算符都是浅拷贝。浅拷贝只是做简单的复制,如果在类的构造函数中new出了内存,浅拷贝只会简单的复制一份指向该内存的指针,而不会再开辟内存,这就会使得程序运行出现内存错误,如此,当对象析构的时候,会delete多次同一块内存区域,发生
阅读全文
摘要:test1: 1 #include<iostream> 2 using namespace std; 3 class Copy_construction { 4 public: 5 Copy_construction(int a = 0) 6 { 7 this->a = a; 8 cout << "
阅读全文
摘要:4.1在要求隐式转换的程序上下文中,我们可以通过将构造函数声明为explicit加以阻止。 关键字explicit只对一个实参的构造函数有效。需要多个实参的构造函数不能用于执行隐式转换,所以无需将这些构造函数指定为explicit。只能在类内声明构造函数时使用explicit关键字,在类外部定义时不
阅读全文
摘要:前言:C语言中的数组指针和指针数组 数组指针,是指向数组的指针的缩写;指针数组,是存放指针的数组的缩写。其实很多时候,往往因为简写和缩写带给我们很多困惑。我曾想过不用简称去学习,但在很多时候,我们查询的书籍文档和文章中还是会频频出现这样的简称,所以有必要扣一下字眼了。 无论在《c和指针》还是《Eff
阅读全文
摘要:3.1如果同一作用域内的几个函数名字相同但形参列表不同,我们称之为重载函数。 3.1.1不允许两个函数除了返回类型外所有的要素都相同。(这也是很好解释的) 3.1.2 有默认参数的重载测试 3.1.3 忽略了顶层const的重载 NOTE: 1、局部变量不能做默认实参。 2、重载函数的指针,指针类型
阅读全文

浙公网安备 33010602011771号