精华内容
下载资源
问答
  • cocos2d-x Error:不允许使用继承成员

    千次阅读 2014-02-14 10:08:26
    不允许使用继承成员 在类的定义中增加该函数的定义,并在最前面加上virtual关键字。


    不允许使用继承成员

        在类的定义中增加该函数的定义,并在最前面加上virtual关键字。
    展开全文
  • 最近在操作中遇到了在MFC中添加成员函数的要求,但是却出现提示“不允许使用继承成员” 附上源代码及编译结果: // dianjiDlg.cpp : 实现文件 // #include "stdafx.h" #include "dianji.h" #include "dianjiDlg.h" ...

    最近在操作中遇到了在MFC中添加成员函数的要求,但是却出现提示“不允许使用继承成员”

    附上源代码及编译结果:

    <pre name="code" class="cpp">// dianjiDlg.cpp : 实现文件
    //
    
    #include "stdafx.h"
    #include "dianji.h"
    #include "dianjiDlg.h"
    #include "afxdialogex.h"
    #include "LTSMC.h"
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    
    // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
    
    class CAboutDlg : public CDialogEx
    {
    public:
    	CAboutDlg();
    	
    
    // 对话框数据
    	enum { IDD = IDD_ABOUTBOX };
    
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
    
    // 实现
    protected:
    	DECLARE_MESSAGE_MAP()
    };
    
    CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
    {
    }
    
    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialogEx::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
    END_MESSAGE_MAP()
    
    
    // CdianjiDlg 对话框
    
    
    
    CdianjiDlg::CdianjiDlg(CWnd* pParent /*=NULL*/)
    	: CDialogEx(CdianjiDlg::IDD, pParent)
    {
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CdianjiDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialogEx::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CdianjiDlg, CDialogEx)
    	ON_WM_SYSCOMMAND()
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    END_MESSAGE_MAP()
    
    
    // CdianjiDlg 消息处理程序
    
    BOOL CdianjiDlg::OnInitDialog()
    {
    	CDialogEx::OnInitDialog();
    
    	// 将“关于...”菜单项添加到系统菜单中。
    
    	// IDM_ABOUTBOX 必须在系统命令范围内。
    	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    	ASSERT(IDM_ABOUTBOX < 0xF000);
    
    	CMenu* pSysMenu = GetSystemMenu(FALSE);
    	if (pSysMenu != NULL)
    	{
    		BOOL bNameValid;
    		CString strAboutMenu;
    		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
    		ASSERT(bNameValid);
    		if (!strAboutMenu.IsEmpty())
    		{
    			pSysMenu->AppendMenu(MF_SEPARATOR);
    			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    		}
    	}
    
    	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
    	//  执行此操作
    	SetIcon(m_hIcon, TRUE);			// 设置大图标
    	SetIcon(m_hIcon, FALSE);		// 设置小图标
    	smc_board_init(0,0,"COM1",115200);
    
    	// TODO: 在此添加额外的初始化代码
    
    	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }
    
    void CdianjiDlg::OnCancel()
    {
    	CDialog::OnCancel();
    	smc_board_close(0);
    }
    
    void CdianjiDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    	{
    		CAboutDlg dlgAbout;
    		dlgAbout.DoModal();
    	}
    	else
    	{
    		CDialogEx::OnSysCommand(nID, lParam);
    	}
    }
    
    // 如果向对话框添加最小化按钮,则需要下面的代码
    //  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
    //  这将由框架自动完成。
    
    void CdianjiDlg::OnPaint()
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); // 用于绘制的设备上下文
    
    		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
    		// 使图标在工作区矩形中居中
    		int cxIcon = GetSystemMetrics(SM_CXICON);
    		int cyIcon = GetSystemMetrics(SM_CYICON);
    		CRect rect;
    		GetClientRect(&rect);
    		int x = (rect.Width() - cxIcon + 1) / 2;
    		int y = (rect.Height() - cyIcon + 1) / 2;
    
    		// 绘制图标
    		dc.DrawIcon(x, y, m_hIcon);
    	}
    	else
    	{
    		CDialogEx::OnPaint();
    	}
    }
    
    //当用户拖动最小化窗口时系统调用此函数取得光标
    //显示。
    HCURSOR CdianjiDlg::OnQueryDragIcon()
    {
    	return static_cast<HCURSOR>(m_hIcon);
    }
    <pre name="code" class="cpp">这是定义的函数:
    void CdianjiDlg::OnCancel()
    {
    	CDialog::OnCancel();
    	smc_board_close(0);
    }


    
    
    
    

    编译结果:

    那么,我在程序中仔细找到问题所在:

    class CAboutDlg : public CDialogEx
    {
    public:
    	CAboutDlg();
    	
    中并未定义OnCance.打开基类CdianjiDlg并定义此成员函数:

    class CdianjiDlg : public CDialogEx
    {
    // 构造
    public:
    	CdianjiDlg(CWnd* pParent = NULL);	// 标准构造函数
    	void CdianjiDlg::OnCancel()
    
    // 对话框数据
    	enum { IDD = IDD_DIANJI_DIALOG };
    
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持
    
    从而解决这个问题。其实使用虚函数也可以解决此类问题。

    从此例中我们探讨一个问题:派生类使用基类成员(继承)与虚函数的关系。



    展开全文
  • c++之哪些成员函数能被继承

    千次阅读 2020-06-14 21:25:50
    C++中,并是所有的成员函数都能被子类继承,有三类成员函数能被子类继承,分别是:构造函数(包括拷贝构造)、析构函数、赋值运算符重载函数。 一,构造函数  构造方法用来初始化类的对象,与父类的其它成员...

    C++中,并不是所有的成员函数都能被子类继承,有三类成员函数不能被子类继承,分别是:构造函数(包括拷贝构造)、析构函数、赋值运算符重载函数。

    一,构造函数   

    构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。   如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显式地声明构造函数情况下创建。 构造原则如下:

    1. 如果子类没有定义构造方法,则调用父类的无参数的构造方法。

    2. 如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类无参数的构造方法,然后执行自己的构造方法。

    3. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数,则会调用父类的默认无参构造函数。

    4. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类自己提供了无参构造函数,则会调用父类自己的无参构造函数。

    5. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类只定义了自己的有参构造函数,则会出错(如果父类只有有参数的构造方法,则子类必须显示调用此带参构造方法)。

    6. 如果子类调用父类带参数的构造方法,需要用初始化父类成员对象的方式 。

    构造函数不能为虚:

    虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数

    要成为虚函数必须满足两点,一就是这个函数依赖于对象调用,因为虚函数就是依赖于对象调用,因为虚函数是存在于虚函数表中,有一个虚函数指针指向这个虚表,所以要调用虚函数,必须通过虚函数指针,而虚函数指针是存在于对象中的。二就是这个函数必须可以取地址,因为我们的虚函数表中存放的是虚函数函数入口地址,如果函数不能寻址,就不能成为虚函数。构造函数内联函数不可作为虚函数。

    二,析构函数   

    析构函数也不会被子类继承,只是在子类的析构函数中会调用父类的析构函数。

    • 如果没有将基类的析构函数定义为虚函数
      当基类指针指向子类对象时,如果基类的析构函数不是virtual,那么子类的析构函数将不会被调用,子类的资源没有正确是释放,因此造成内存泄露

    三,赋值运算符重载函数   

    赋值运算符重载函数也不会被子类继承,只是在子类的赋值运算符重载函数中会调用父类的赋值运算符重载函数。

    展开全文
  • C++ 重命名继承成员

    千次阅读 2014-03-02 16:42:29
    继承成员函数的重命名是指在派生类中改变继承 成员的功能,仅仅为该成员起一个新的名字。 重命名主要用于解决两个问题:  —解决名字冲突问题  —允许派生类选择更合适的术语来命名 重命名的方法 ...

    继承成员函数的重命名是指在派生类中不改变继承

    成员的功能,仅仅为该成员起一个新的名字。


    重命名主要用于解决两个问题:

         —解决名字冲突问题

         —允许派生类选择更合适的术语来命名


    重命名的方法

        —在派生类中增加一个新名字命名的成员

            函数,该成员函数的实现仅仅是调用旧

            名字的函数。



    展开全文
  • 哪些成员函数能被继承

    千次阅读 2019-03-27 21:15:35
    C++中,并是所有的成员函数都能被子类继承,有三类成员函数能被子类继承,分别是:构造函数(包括拷贝构造)、析构函数、赋值运算符重载函数。 1. 构造函数  构造方法用来初始化类的对象,与父类的其它成员...
  • 继承成员访问控制机制(C++)

    千次阅读 热门讨论 2014-09-20 20:22:36
    面向对象编程其中肯定少不了类的继承机制,而类的继承又分为三种类型:公有继承(public)、私有继承(private)和保护继承(protected),不同的继承机制使派生类对基类成员有不同的访问权限,而派生类的类成员和...
  • 使用一个继承自QObject带有Q_OBJECT宏的导出类时,编译报错:不允许 dllimport 静态数据成员 的定义。 原因是自动生成的moc文件带有静态函数,无法导出。 1、在Qt中的解决办法是将导出宏定义成Q_DECL_IMPORT。...
  • 轻松理解—继承成员访问控制机制

    千次阅读 多人点赞 2012-05-08 10:30:57
    在我们学习面向对象程序设计的时候,那么这个继承成员访问控制机制您必须对其有深入的了解,达到熟练掌握的目的;要不也许这点知识你过关,你对这点知识还抱着半信半疑的感觉,那么你一旦碰到这个问题,你的第一个...
  • C++不允许使用不完整型别说明

    千次阅读 2018-11-01 11:48:29
    在讲述柔性数组成员之前,首先要介绍一下完整类型(incomplete type)。完整类型是这样一种类型,它缺乏足够的信息例如长度去描述一个完整的对象。 incomplete types (types that describ...
  • C++不允许使用不完整的类型说明

    万次阅读 多人点赞 2017-08-31 15:34:26
    C与C++关于完整类型的说明在讲述柔性数组成员之前,首先要介绍一下完整类型(incomplete type)。完整类型是这样一种类型,它缺乏足够的信息例如长度去描述一个完整的对象。incomplete types (types that ...
  • C++不允许使用不完整的类型

    千次阅读 2020-03-28 16:43:40
    这个情况确实需要,然后你会发现编译器提示“不允许使用不完整的类型”错误提示。 不过为了探究此错误底下的更多的信息,让初学者更明白为什么错了,对于学习更有好处。知道为什么错了,就不会再无意中犯错。当你...
  • 使用一个继承自QObject带有Q_OBJECT宏的导出类时,编译报错:不允许 dllimport 静态数据成员 的定义。 原因是自动生成的moc文件带有静态函数,无法导出。 在Qt中的解决办法是 去掉 Q_DECL_IMPORT ...
  • C++ 基类私有成员会被继承

    万次阅读 多人点赞 2015-11-05 00:51:24
    1.派生类间接访问继承私有成员在类的继承中,类的私有成员在派生类中是“可见“的,这种”可见“是指在派生类的成员函数中,或者通过派生类的对象(指针,引用)能直接访问它们。但是,能直接访问并代表...
  • [C++] 继承与同名成员变量

    千次阅读 2017-09-02 21:50:46
    C++继承中子类与父类有同名成员变量的情况话多说,先看下面这个例子:#include class Base { public: int a; Base() { a = 0; std::cout ; } void print() { std::cout << a <<
  • 继承

    千次阅读 2019-05-06 22:06:57
    继承:从已有类中,派生出新的类,新的类中吸收已有类当中的状态和行为,...1、继承允许多层继承不运行多重继承。 //错误的继承——多层继承 class A{} class B{} class C extends A,B{} //错误的 //多重继承 cl...
  • c++父类的私有成员能否继承

    千次阅读 2019-08-14 00:13:11
    子类继承了父类的共有函数,且父类的公有函数调用了其内部的私有函数,此时子类调用父类的公有函数便能访问父类的私有成员函数了。 #include <iostream> using namespace std; class A { public: v...
  • //父类的Print是虚函数,继承的时候被子类的Print函数覆盖 cin >> type >> color >> daytime; Bird bird(type, color, daytime); bird.Print(); animal = &bird; animal->Print(); return 0; }
  • java中的成员方法与成员变量的继承

    千次阅读 2009-07-08 15:12:00
    一 变量 子类与父类出现同名时,则子类隐藏父类的同名成员变量(子类与父类变量的类型可以一样,父类的final或static修饰的变量也可以被隐藏) 二 成员方法 1、方法继承:利用extends关键字一个方法继承另一个...
  • 详谈C++保护成员和保护继承

    千次阅读 2017-03-31 20:54:04
    protected 与 public 和 private 一样是用来声明成员的访问权限的。...如果基类声明了私有成员,那么任何派生类都是能访问它们的,若希望在派生类中能访问它们,应当把它们声明为保护成员。如果在一个类中
  • 类中默认成员函数的继承方法

    千次阅读 2018-05-15 21:44:43
     它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,成为派生类。简单来说,就是父子继承关系,你从你父亲继承了某些东西,而你在你父亲的基础上又扩充了相关的功能特性,构成了你自己。你...
  • OC继承详解与使用规则

    千次阅读 2015-08-15 09:07:45
    2、继承使用场合: (1)如果有两个或者两个以上的类含有很多相同的成分(成员变量/方法相同)。那么就可以把它们相同的部分提取到一个单独的类中,让这些相似的类继承于它。继承的实质就是把多个类中相同的代码抽...
  • 我们在使用继承的时候同时也就拥有了父对象中的保护成员,增加了耦合度。而对象组合就只需要在使用的时候接口稳定,耦合度低。   Is a和has a  我们怎么来判断是用继承还是组合呢?只有在对象之间关系具有很强...
  • java 私有的成员能被子类继承吗?

    千次阅读 2014-08-04 21:57:06
    private,public,protected和继承没有关系,他们对成员函数和变量的限制只是在成员的可见性上, public允许来自任何类的访问; private只允许来自改类内部的方法访问,不允许任何来自该类外部的访问; protected允许
  • 但是现在存在一个问题,例如我们在使用MFC库时,往往会去继承库里面的一个类,但是我们并去看父类里面的实现代码,所以在定义成员变量的时候可能会和父类里面的成员变量一样。但是这样会产生什么后果我们基本...
  • C++ 多重继承 虚拟继承使用

    千次阅读 2016-10-28 15:12:25
    面向对象编程语言中的多重继承指的是一个类别可以同时从多于一个父类继承行为与特征的功能。与单一继承相对,单一继承指一... 重温Java,发现Java竟然支持类多重继承(直接继承类),却允许接口的多重继承。。  C+
  • C++中类成员和类继承的private、protected和public关键字作用。
  • c++模板类在继承中子类无法访问父类的成员

    千次阅读 多人点赞 2018-03-23 17:58:01
    c++模板类在继承中子类无法访问父类的成员 问题:c++模板类在继承中子类无法访问父类的成员 解决方法:在子类访问父类时加上父类的前缀或使用this-&gt;调用 c++从入门到放弃,感觉c++了解的越多,就越...
  • 在Java中使用继承

    千次阅读 2005-04-25 22:40:00
    类的继承允许你在一个已经存在的类之上编写新的程序,例如,你想建立一个可在屏幕上显示并能填充它的矩形类,你可以从头开始或者利用旧的矩形类,下面的部分将向你介绍如何继承已存在的Rectangle类,而需重写其中...
  • string类为什么不继承

    千次阅读 2016-09-25 11:02:36
    答案: 可以,因为String类有final修饰符,而final修饰的类是能被继承的,实现细节不允许改变。 public final class String implements java.io.Serializable, ComparableString>, CharSequence 11 详细...
  • c++ 继承

    千次阅读 2021-05-11 21:59:40
    继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 224,713
精华内容 89,885
关键字:

不允许使用继承成员