C++赋值操作符不能继承
在网上搜索相关资料时,看到有人说,赋值操作符可以被继承,并且给出了一个例子。
一时间,也没想出那个例子错在哪里。
例子代码如下:
#include <iostream>
using namespace std; class A {
public:
A& operator=(const A& obj) {
cout << "the = operator called!" << endl;
return *this;
}
}; class B: public A{
private:
int data; public:
B(int data) {
this->data = data;
} void printNum() {
cout << this->data << endl;
}
}; int main() {
B a(10), b(20);
a = b;
a.printNum();
b.printNum();
return 0;
}
在上面这个例子中,派生类调用了基类的赋值操作符,但是这不能表明派生类继承了基类的赋值操作符。
当派生类没有形如 B& operator=(const B& t);这样的赋值操作符函数时,编译器会自动生成一个默认的赋值操作符函数。
同时这个函数,会去调用基类的赋值操作符函数。这也就是我们上面这个例子,让我们误以为继承了基类赋值操作函数的原因。
我们知道满足以下一个条件时,编译器并不会为类提供默认的赋值操作函数。
①类中含有常数据成员
②类中含有引用类型的成员
因此,如果将类B改写为:
class B: public A{
private:
const int data = 1; public:
B(int _data):data(_data) {
} void printNum() {
cout << this->data << endl;
}
};
那么,这个时候就会报错。
C++赋值操作符不能继承的更多相关文章
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
一.本文目的与说明 1. 本文目的:理清在各种继承时,构造函数.复制构造函数.赋值操作符.析构函数的执行顺序和执行内容. 2. 说明:虽然复制构造函数属于构造函数的一种,有共同的地方,但是也具有一定的 ...
- c++ 构造函数,拷贝构造函数,析构函数与赋值操作符
题目: 为下面的Rectangle类实现构造函数,拷贝构造函数,赋值操作符,析构函数. class Shape { int no; }; class Point { int x; int y; }; ...
- C++重载赋值操作符
1.C++中重载赋值操作函数应该返回什么? 类重载赋值操作符一般都是作为成员函数而存在的,那函数应该返回什么类型呢?参考内置类型的赋值操作,例如 int x,y,z; x=y=z=15; 赋值行为相当 ...
- [c++基础]3/5原则--拷贝构造函数+拷贝赋值操作符
/* * main.cpp * * Created on: Apr 7, 2016 * Author: lizhen */ #include <iostream> #include &qu ...
- C++学习笔记13:运算符重载(赋值操作符2)
移动语义 完成所有权的移交,当拷贝构造和赋值构造时,目标对象的所有权必须移交给我们的新的对象,原始对象将丧失所有权,_p指针将不再指向原来的那个数组: 左值与右值 C原始定义 左值:可以出现在赋值号的 ...
- C++ 之 重载赋值操作符
Widget 类中,定义了一个 Bitmap 类型的私有数据成员 -- pb 指针 class Bitmap { ... }; class Widget { private: Bitmap *pb; ...
- C++学习基础六——复制构造函数和赋值操作符
1.什么是复制构造函数 复制构造函数:是构造函数,其只有一个参数,参数类型是所属类的类型,且参数是一个const引用. 作用:将本类的成员变量赋值为引用形参的成员变量. 2.什么是赋值操作符 赋值操作 ...
- 深入C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结
转自 http://www.jb51.net/article/37527.htm,感谢作者 #include "stdafx.h" #include <iostre ...
- C++学习笔记12:运算符重载(赋值操作符1)
为数偶类定义专用的赋值操作符 class Couple { public: Couple(, ) :_a(a), _b(b) {} Couple(const Couple &c):_a(c._ ...
随机推荐
- 简单实现一个button控制两种状态
<button class="btn a-bgcolor" data-toggle="tooltip" data-placement="left ...
- SpringMVC--提交表单
今天使用AbstractCommandController做一个提交表单的样例 (1)首先,建立一个User.java package com.zk.domain; import java.util. ...
- Linux系统运维工程师入门绝招放送
运维是干嘛的?安装服务器系统?重装系统再装系统?背锅的? 我就稀里糊涂的,这样报着必死的决心,考下RHCE认证,走上了Linux运维的道路,成为了一名linux运维工程师.有些心得跟大家分享下,避免小 ...
- Educational Codeforces Round 80 (Rated for Div. 2)D(二分答案,状压检验)
这题1<<M为255,可以logN二分答案后,N*M扫一遍表把N行数据转化为一个小于等于255的数字,再255^2检验答案(比扫一遍表复杂度低),复杂度约为N*M*logN #define ...
- 国际化支持、activity生命周期、屏幕翻转的ui适配
国际化 对于手机的不同语言做出不同的语言描述,这里只是简单的提一下,实际上针对比较大型的项目,有可能不同的语言要做不同的ui适配. 例如下面:中文长度不长但是在德语中占据很长的位置,这个就要针对性的适 ...
- 关于AD元件的命名
1.电容 C? 10uf 2.电阻 R? 10k 3.芯片 U? STM32F103VET6 4.单排 J? SIP 5.三极管 Q? s8550 6.晶振 Y? 12M
- 1022_Digital_Library (30分)
这里提供两种写法, 其实都是一样的,第一种比较快. #include <bits/stdc++.h> using namespace std; map<string,set<s ...
- Maven (一)--- 入门和依赖
部分图片来自参考资料 问题 : - maven 生命周期是怎么样的 - mvn clean install 与 mvn clean deploy 的区别是什么 概述 Maven 是一种构建项目的工具, ...
- Vue-路由传参query与params
注明:vue中 $router 和 $route 的区别 //$router : 是路由操作对象,只写对象 //$route : 路由信息对象,只读对象 //操作 路由跳转 this.$router. ...
- 惠普笔记本,如何选择U盘启动
开机先连续点击键盘F9按键进入选择启动盘界面,找到自己的U盘(KingstonDataTraveler G3)