`
lovnet
  • 浏览: 6693603 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

C++赋值号能否被继承

 
阅读更多

在C++中,普通函数能够被继承,但是析构函数和构造函数不能被继承。这里有个问题,C++赋值号能否被继承?

看以下代码:

#include <iostream>

using namespace std;

class A{
public:
	A() { 
		a = 0;
		cout<<"A::A()"<<endl; 
	}     

	A & operator =(A &aa)	{
		cout<<"A:="<<endl;
		this->a = aa.a;
		return *this;
	}
	int a;
};
class B:public A{
public:
	B() {
		i=1;
		cout<<"B::B()"<<endl;
	}
	public:
	int i;
}; 
int main(void){

	A a, b;
	a.a = 100;
	b.a = 200;
	a = b;
	cout<<a.a<<endl;

	
	B b1, b2;
	b1.a = 1;
	b1.i = 10;
	b2.a = 2;
	b2.i = 20;
	cout <<"***************"<<endl;
	b1 = b2;
	cout<<"b1.a: "<<b1.a<<" "<<"b1.i "<<b1.i<<endl;
	return 0;

观察输出结果:

可以看到没有出错,调用的是A类的重载赋值号方法,而且赋值成功。按理说A类只对A的属性进行赋值号重载,返回A对象,B类的属性应该没有值才对。这是为什么呢?原因是系统自动生成了赋值符号,即使B类没有对赋值号重载,一样可以赋值成功。

我们再在类B内对赋值号进行重载,代码如下:

B& operator =(B &bb){
		cout<<"B:="<<endl;
		this->a = bb.a;
		this->i = bb.i;

		return *this;
	}


再观察输出结果:

此时调用的是B类的重载赋值号方法。

分享到:
评论

相关推荐

    C++ 赋值构造函数注意点介绍

    您可能感兴趣的文章:浅谈c++构造函数问题,初始化和赋值问题详解C++ 拷贝构造函数和赋值运算符详解C++中对构造函数和赋值运算符的复制和移动操作C++中复制构造函数和重载赋值操作符总结深入C++中构造函数、拷贝构造...

    C++若干疑难问题分析

    若干关于C++的问题释义,比如C++赋值运算符重载函数不能被派生类继承的真实原因

    C++(继承)代码

    程序中主要是运用了类这一重要的结构体,并运用了继承的方式,加上使用虚函数实现动态多态性,来编写管理程序。首先我是定义类及派生类,类中主要是数据成员赋值,及数据输出的函数。

    C++多继承实例

    子类对父类的公共继承。父类有默认构造函数,带参数构造函数,保护变量的赋值与输出,子类有默认构造函数,父类带参构造函数的继承与父子类变量的赋值,子类自定义函数对父子类变量的操作

    C++类的继承和多态代码

    实现以下类的构造、复制构造、赋值运算符以及clone()和draw()函数,其中draw()函数只要求输出一个表示是哪个类的draw函数的字符串 在main()函数中写代码测试这些类的功能,尤其应使用一个Node类的指针去调用各个类的...

    网二维数组的动态创建和释放.pdf 网负号重载(1).pdf 网负号重载pdf 赋值号“==“重载(1).pdf 赋值号"==

    网二维数组的动态创建和释放.pdf 网负号重载(1).pdf 网负号重载pdf 赋值号“==“重载(1).pdf 赋值号"== “重载.pdf 构造函数可以调用虚函数吗, 析构函数可... 后置加加(1).pdf ...为什么不能自赋值1...

    Effective C++ 中文版

    条款36:绝不重新定义继承而来的non-virtual函数 条款37:绝不重新定义继承而来的缺省参数值 条款38:通过复合塑模出has-a或“根据某物实现出” 条款39:明智而审慎地使用private继承 条款40:明智而审慎地使用...

    鸡啄米:C++编程入门系列

    鸡啄米:C++编程入门系列之四十三(继承与派生:赋值兼容规则) 第八部分:多态性 鸡啄米:C++编程入门系列之四十四(多态性:多态的概念和类型) 鸡啄米:C++编程入门系列之四十五(多态性:运算符重载的概念...

    Effective C++

    书中的每一条准则描述了一个编写出更好的C++的方式,每一个条款的背后都有具体范例支持,书中讲的都是C++的编程技巧和注意事项,很多都是自己平时不太注意但又很重要的内容,绝对经典,作者Scott Meyers是全世界最...

    实例代码讲解c++ 继承特性

    ——派生类需要自己的构造函数。  派生类中可以根据需要添加额外的数据成员和成员函数,甚至可以给予继承的原成员函数新的定义。... C++11增加了允许继承构造函数的机制,但派生类默认不能继承构造函数和析构

    C++编程思想习题

    11.3.5不能重载的运算符 11.4非成员运算符 11.5重载赋值符 11.6自动类型转换 11.6.1构造函数转换 11.6.2运算符转换 11.6.3一个理想的例子:strings 11.6.4自动类型转换的缺陷 11.7小结 11.8练习 第12章 动态对象创建...

    C++面试题,针对资深开发工程师面试题目含详细解答

    3 用C++设计一个不能被继承的类 4 简述队列和栈的异同 5 深拷贝和浅拷贝的区别是什么 6 栈上分配内存和堆上分配内存有什么区别? 7 C++ 的一个类中,静态成员函数和普通成员函数有什么区别? 8 简述指针常量与常量...

    c++ coding standard 英文版

    本书实际上涵盖了 C++ 程序设计的每一个方面,包括:设计和编码风格、函数、操作符、类的设计、继承、构造与析构、赋值、名字空间、模块、模板、泛型、异常、 STL 容器和算法等等。书中对每一条规范都给出了...

    2维数组赋值.cpp

    C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于...

    现代C++程序设计

    1.2.1 C++程序并不一定是面向对象的 1.2.2 一个简单的面向对象程序示例 1.2.3 面向对象的软件更有优势 1.3 结构化设计与面向对象设计 1.3.1 ATM——结构化设计 1.3.2 采用面向对象方法的ATM——究竟是谁的任务 ...

    《由浅入深学C++-基础、进阶与必做300题》pdf格式 (完整版 带目录

    本书循序渐进地讲述了C++的基础知识、C++程序的组成及其开发过程、C++程序中的数据、表达式和语句、控制程序流程、数组与字符串、指针与引用、使用函数、函数模板、错误和异常处理、宏和预编译、面向对象的开发、...

    C++程序设计_图书管理系统的控制台实现.pdf

    本次实验旨在主要对前期学习的有关C++面向对象部分的有关类的继承 (inheritance)相关知识的实践与应用。 在理论方面主要体现了: 1. 提升由面向过程向面向对象的思维转变; 2. 对继承关系的分析和实践应用; 3. 对函数...

    详谈C++何时需要定义赋值/复制构造函数

    假设基类使用了动态内存分配,而且定义了析构函数、复制构造函数和赋值函数,但是在派生类中没有使用动态内存分配,那么在派生类中不需要显示定义析构函数、复制构造函数和赋值函数。 当基类和派生类采用动态内存...

    C++实验五.docx

    其中研究生类从学生类继承过来,分别采用公有继承与私有继承、保护继承三种方式,程序中包括输入数据的函数,运行时输入其5项的值,程序应输出5个数据值。 答案:略 2、(1) 声明一个基类Animal,有私有整型成员...

    高质量C++编程指南.PDF

    高质量C/C++编程指南.PDF 作者:林锐 目录: 前 言 第1章 文件结构 1.1 版权和版本的声明 1.2 头文件的结构 1.3 定义文件的结构 1.4 头文件的作用 1.5 目录结构 第2章 程序的版式 2.1 空行 2.2 代码行 2.3 代码行内...

Global site tag (gtag.js) - Google Analytics