首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么operator =不从模板类继承

operator = 不从模板类继承的原因是因为赋值运算符(operator =)是一个特殊的成员函数,它用于将一个对象的值赋给另一个对象。模板类是一种通用的类模板,可以用于创建多个具体类型的类。由于赋值运算符需要访问类的私有成员,而模板类在编译时才会根据具体类型生成代码,因此无法直接访问模板类的私有成员。

另外,赋值运算符通常需要进行深拷贝(deep copy),即复制对象的所有成员变量,包括指针类型的成员变量所指向的内存。模板类的成员变量可能是任意类型的,包括指针类型,因此无法确定如何进行深拷贝操作。

为了解决这个问题,可以通过在模板类中定义一个非模板的赋值运算符函数,然后在该函数中调用模板类的成员函数来完成赋值操作。这样可以保证每个具体类型的类都有自己的赋值运算符函数,而不需要从模板类继承。

总结起来,operator = 不从模板类继承的原因是因为模板类无法确定具体类型的成员变量和如何进行深拷贝操作。为了解决这个问题,可以在模板类中定义非模板的赋值运算符函数,并在该函数中调用模板类的成员函数来完成赋值操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【C++】泛型编程 ⑧ ( 模板继承语法 | 普通 继承 模板语法 | 模板 继承 模板语法 | 继承模板必须指定具体的类型参数列表 | 继承 模板 必须重写构造函数 )

一、普通 继承 模板语法 1、普通 继承 模板语法 模板 作为父 , 子类 继承 模板 , 需要 指定 具体的类型参数列表 ; 需要 重写 构造函数 , 其中必须调用 模板 具体..., 模板子类 与 普通子类 区别就是 , 模板子类 需要在尖括号中指定 具体的 类型参数列表 的 数据类型 ; 此时 , 在继承时 , 被继承模板 必须 声明 类型参数列表 , 将具体的泛型类型写在尖括号中..., 调用 模板 具体 的构造函数 , 如果 子类 继承 模板 , 如果 子类没有实现 构造函数 , // 模板 继承时 , 需要具体化 模板 // 也就是 指定 模板 的 类型参数列表...二、模板 继承 模板语法 1、模板 继承 模板语法 普通 继承 模板时 , 需要指定 模板 的具体 参数类型 , 下面代码中的 具体类型就是 int ; class Son : public...Father 模板 继承 模板 时 , 也需要 指定 父模板 的具体 泛型类型 , 只是这个泛型类型可以是 另外一个泛型 T ; 下面的代码 是 模板 继承 模板的 代码 , Son2

89930
  • Java中的String能否被继承为什么

    不能被继承,因为String有final修饰符,而final修饰的是不能被继承的。...{ // 省略...  } final修饰符的用法: 1.修饰   当用final修饰一个时,表明这个不能被继承。...final中的成员变量可以根据需要设为final,但是要注意final中的所有成员方法都会被隐式地指定为final方法。 ? 2.修饰方法   使用final修饰方法的原因有两个。...第一个原因是把方法锁定,以防任何继承修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。...注:一个中的private方法会隐式地被指定为final方法。

    1.9K60

    为什么一个不能随意被继承

    这个解释对于了解"继承"的小伙伴来说,显得理所当然。 但实际情况是:不是因为有了“继承”特性,里氏替换才有意义;而是因为有了里氏替换原则,才规范了“继承”特性的使用。 PS:小二哥可能表述得有点怪。...有了抽象,我们就可以基于抽象写一些具体的实现了--这就是基(父)和派生(子类)的继承关系。 好啦!问题来啦~ 请问“这个继承关系可以随便使用吗?”...; } } 注意看,现在我定义Cat,并继承Dog public class Cat extends Dog { @Override void bark() {...PS:大家可以上网搜一下这个例子,小二哥这里就不啰嗦啦~ 总结 由之前的例子可知,我们可以用里氏替换原则来规范继承关系的实现是否合理。 如果子类可以替换它的父,那么这个继承关系就是的。...为什么里氏代换原则这么重要,小伙伴们理解了吗?

    19620

    Hibernate的实体为什么继承Serializable?

    java中常见的几个(如:Interger、String等),都实现了java.io.Serializable接口。 实现 java.io.Serializable 接口的是可序列化的。...没有实现此接口的将不能使它们的任一状态被序列化或逆序列化。序列化的所有子类本身都是可序列化的。这个序列化接口没有任何方法和域,仅用于标识序列化的语意。...为了对象的序列化而需要继承的接口也只是一个象征性的接口而已,也就是说继承这个接口说明这个对象可以 被序列化了,没有其他的目的。...Hibernate并不要求持久化必须实现java.io.Serializable接口,但是对于采用分布式结构的Java应用,当Java对象在不同的进程节点之间传输时,这个对象所属的必须实现Serializable...接口,此外,在Java Web应用中,如果希望对HttpSession中存放的Java对象进行持久化,那么这个Java对象所属的也必须实现Serializable接口。

    1.2K30

    C++函数模板模板函数)详解

    C++函数模板模板函数)详解 定义 用法: 函数模板的原理 延申用法 2.1为什么需要模板 2.2单个模板语法 2.3继承中的模板语法 案例1: 案例2: 2.4模板的基础语法 2.5模板语法知识体系梳理...延申用法 2.1为什么需要模板 模板与函数模板的定义和使用类似,我们已经进行了介绍。...继承中的模板语法 案例1: 1 //结论: 子类从模板继承的时候,需要让编译器知道 父的数据类型具体是什么(数据类型的本质:固定大小内存块的别名)A 2 // 3 class...继承 模板 31 void main() 32 { 33 MyArray02 dArray2(10); 34 dArray2[1] = 3.15; 35 36 }...37 38 39 //演示 从模板 继承 一般 40 void main11() 41 { 42 MyArray01 d_array(10); 43 44 for (int i

    1.6K40

    openFoam源码中的C++

    >&); // 的前置声明 class dictionary; 这里用到了很多模板的语法,首先声明了两个模板的前置声明Field以及SubField,在这里要注意的是为什么要进行前置声明...: 由于某些原因不方便在头文件中直接引入另一个模板的头文件,但声明变量是需要用到该模板类型,这时候就要用到模板的前置声明 可以看到操作符重载的参数列表里用到了Field,这就必须进行前置声明...,可能此时大家又有疑问,为什么操作符的重载也要进行前置声明呢,这是可以看到在Filed这个大的模板里有这样一段友元函数的声明: ?...有这样一条规定:友元函数和运算符的前向声明:如果一个模板里调用了友元函数(外面定义的方法可以使用该类里面的私有变量),而且这个友元函数里面的参数还用到了这个模板,那么就得提前以模板的方式去声明这个和函数...下面再看这个Filed模板里面的一些难以理解的C++代码。

    91630

    项目里出现两个配置继承WebMvcConfigurationSupport时,为什么只有一个会生效(源码分析)

    为什么我们的项目里出现两个配置继承WebMvcConfigurationSupport时,只有一个会生效。...大家基本遇到过一种情况,就是我配置中已经配置了,为什么就是没有生效呢?...其中一种原因就是,自己写的配置继承了WebMvcConfigurationSupport,当项目出现两个配置继承该类时,只会讲第一个配置生效,至于为什么,就是今天博主需要讲解的,我们必须了解一些...的配置,已经被扫描到,就会添加一个map缓存,77 //下一个也继承了WebMvcConfigurationSupport的配置,将不在解析,直接返回null。...我直接把这个问题用源码的方式讲解清楚,方便大家明白为什么配置两个WebMvcConfigurationSupport,只有一个生效。我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

    16131

    【C++】侯捷C++面向对象高级编程(下)

    具体的相关继承问题详见STL库部分。 ---- namespace经验之谈 分块开发,避免命名冲突。...---- 模板(template) 模板(class template) 定义的时候将允许使用者任意指定的类型抽出来。 使用时需要进行类型的指定。...---- 成员模板(member template) 也就是模板的嵌套,模板中有模板。 如下图黄色部分。 说明: 黄色这一块是当前模板的一个成员,同时它自己也是个模板。...所以它就叫做成员模板。 T1,T2可以变化,U1,U2也可以变化。 在STL标准库中会大量出现成员模板,先来一个小示例: 解释: 鲫鱼类继承自鱼类,麻雀类继承自鸟类。...调用指针->向上转型(转为具体的子类)->调用虚函数 补充: 继承,函数,继承的是调用权。 父的虚函数子类也一定要有。 父和子类中可以出现同名的函数,但实际上不是同一个。

    66220

    【笔记】C++面向对象高级编程

    动态分配数组内存, 布局和上面差不多, 但是数组部分前面多了一个白色的整数标识了数组元素的数量 继承, 复合, 委托 继承代表is-a的关系, 功能来自父 复合代表has-a的关系, 功能来自内包装的另一个对象...Meyers单例: 核心的静态成员放在函数体内, 这样在主动调用这个之前都不会进行构造 模板方法: 是继承和虚函数的一种典型应用....模板 全特化的模板记得要去掉所有模板参数, 改写为template 模板模板参数: 指模板参数里面是一个模板, 在这种情况下可以让另一个模板作为参数导入, 只要保证可控的其它模板参数都能正确填满即可...模板参数的标注类型可以用class也可以用typename, 建议使用typename防止歧义 C++对象模型 不管是复合还是继承, 都是从内到外构造, 从外到内析构的....我们可以重载的是operator new和operator delete函数, 且不但可以重载成员的, 还可以重载全局的.

    90630

    程序员必须掌握的600个英语单词

    list 类别衍化列 继承列表 class head 类别表头 头 class hierarchy 类别继承体系, 类别阶层 层次体系 class library 类别程式库、类别库 库...class template 类别模板、类别范本 模板 class template partial specializations 类别模板偏特化 模板部分特化 class template...specializations 类别模板特化 模板特化 cleanup 清理、善后 清理、清除 client 客端、客户端、客户 客户 client-server 主从架构 客户/服务器...无穷递回 无限递归 information 资讯 信息 infrastructure 公共基础建设 inheritance 继承继承机制 继承继承机制 inline 行内 内联 inline...无穷递回 无限递归 information 资讯 信息 infrastructure 公共基础建设 inheritance 继承继承机制 继承继承机制 inline 行内 内联 inline

    1.3K20

    Effective c++ 小结

    f来说,的成员函数会隐藏掉全局函数 条款10: 如果写了operator new就要同时写operator delete 让我们回过头去看看这样一个基本问题:为什么有必要写自己的operator...条款20: 避免public接口出现数据成员 Effective中举了三个原因,说明为什么不要放在公开接口中 一致性,以后对对象的所有操作,均需要带(),也就是只能调用函数,不能获取变量...来实现" 条款41: 区分继承模板 模板用来产生一群class,其中对象性别不会影响class的函数行为 继承应用于一群class身上,其中对象性别会影响class的函数行为 条款42...如果类D私有继承B,类型D的对象只不过是用类型B的对象来实现而已;类型B和类型D的对象之间不存在概念上的关系 如果是私有继承,编译器不会隐式的将子类对象转化成基对象 私有继承,基所有函数在子类都变成私有属性...条款43: 明智地使用多继承继承会产生模棱两可,子类调用方法如何两个父都有,则必须指明使用的是哪个父继承会产生钻石型继承体现,为了使得祖先只有一份,请在两个父继承祖先的时候采用虚继承

    78250
    领券