zoukankan      html  css  js  c++  java
  • C++11 virtual函数学习笔记

    #include<iostream>
    #include<string>
    using namespace std;
    class Base
    {
    public:
    	Base(){}
    	~Base(){}
    public:
    	virtual void f1(int x){ cout << "baseclass: f1() " << x << endl; }
    	virtual void f2()final{ cout << "baseclass: f2()  " << endl; }
    	void f3(int x){ cout << "baseclass : f3() " <<x<< endl; }
    	virtual void f4(){ cout << "baseclass:f4()" << endl; }
    	//string isbn()const;
    	//virtual double net_price(size_t n)const final;
    };
    class Derive:public Base
    {
    public:
    	Derive(){}
    	~Derive(){}
    public:
    	//与基类的virtual函数同名不同參数的是重载函数,不能加上override,能够加virtual
    	void f1(double x){ cout << "double derive class :f1()" << x << endl; }
    	//与基类的virtual函数同名同參数的是覆盖函数,能够加virtual,override
    	void f1(int x)override{ cout << "int  derived class :f1()" << x << endl; }
    	//基类的f2()加了final,于是去掉凝视出错
    	//void f2()override{ cout << "override derived class: f2() " << endl; }
    	//可是奇怪的来了,与基类的非virtual函数同名同參数的是居然也是覆盖函数!
    	//假设去掉凝视则会输出“"derive class: f3()”
    	//我觉得应该产生编译错误,可是却没有
    	//void f3(int x){ cout << "derive class: f3() " <<x << endl; }
     
    	//我们看f4()没有不论什么问题,由于baseclass中声明是virtual,在派生类中会自己主动把f4()变为virtual
    	void f4(){ cout << "derive class :f4() " << endl; }
    };
    int main()
    {
    	Base*  pBase = new Base();
    	pBase->f1(1);
    	pBase->f2();
    	pBase->f3(3);
    	pBase->f4();
    	cout << endl;
    	Derive* pDerive = new Derive();
    	pDerive->f1(2.0);
    	pDerive->f1(2);
    	//pDerive->f2();
    	pDerive->f3(3);
    	pDerive->f4();
    	cout << endl;
    	return 0;
    }
    问题我已经自己解决,原来与virtual函数无关,仅仅是名字冲突与继承的问题。派生类的成员会隐藏同名的基类成员。
  • 相关阅读:
    CocoaPods的基本使用方法
    【STM32】电能表抄表功能实现|自学笔记
    【STM32】串口收发驱动Drv_Uart|学习笔记
    【STM32】SYSCLK配置|学习笔记
    【stm32】的PWM外设|学习笔记
    【JavaScript】setAttribute在添加事件时失效解决办法
    三步建立自己域名的主页,Github Pages功能简明手册
    Java生成UUID 与 MySQL数据库如何生成uuid数据
    利用Excel办公软件快速拼接SQL
    Java实现几种常见排序方法
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4276022.html
Copyright © 2011-2022 走看看