与默认构造函数有关,CMFCPropertyGridProperty的派生类构造函数怎么写
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了与默认构造函数有关,CMFCPropertyGridProperty的派生类构造函数怎么写相关的知识,希望对你有一定的参考价值。
我想从CMFCPropertyGridProperty派生出一个子类,但是子类的构造函数该怎么写呢? 我的写法: CObjProperties::CObjProperties(const CString& strName, const COleVariant& varValue, LPCTSTR lpszDescr, DWORD_PTR dwData, LPCTSTR lpszEditMask, LPCT... 我想从CMFCPropertyGridProperty派生出一个子类,但是子类的构造函数该怎么写呢? 我的写法: CObjProperties::CObjProperties(const CString& strName, const COleVariant& varValue, LPCTSTR lpszDescr, DWORD_PTR dwData, LPCTSTR lpszEditMask, LPCTSTR lpszEditTemplate, LPCTSTR lpszValidChars) :MyOwnProperty( strName, varValue,lpszDescr, dwData,lpszEditMask, lpszEditTemplate, lpszValidChars CObjProperties::CObjProperties(const CString& strGroupName, DWORD_PTR dwData, BOOL bIsValueList) : MyOwnProperty(strGroupName, dwData, bIsValueList) 但是这样编译器提示CMFCPropertyGridProperty没有默认的构造函数,我该怎么办呢 展开
参考技术A 如果类里写了一个构造函数,编译器就不提供默认构造函数了,要再自己写个默认构造函数就行了。子类从基类继承,如果子类构造时不显示调用基类的构造函数,那么系统会使用基类的默认构造函数,但是因为没有提供默认的构造函数,所以报错了。可以在构造函数的参数列表中再加入基类的构造函数调用,或者给基类提供一个默认的构造函数。
OnPropertyChanged(字面意思就是属性更改),接着找到MFC的源文件afxpropertygridctrl.cpp,定位到OnPropertyChanged这个函数,发现源代码中有一行GetOwner()->SendMessage(AFX_WM_PROPERTY_CHANGED,
GetDlgCtrlID(),
LPARAM(pProp));
什么是默认构造函数头[重复]
【中文标题】什么是默认构造函数头[重复]【英文标题】:What would be the default constructor header [duplicate] 【发布时间】:2016-10-09 14:56:48 【问题描述】:我是 java 新手,正在尝试掌握有关默认构造函数的标头的概念。
Circle 中第一个构造函数的头部是:
public Circle(String label, int radius)
如果决定为类添加一个默认构造函数。这个默认构造函数的标题是什么?
我在网上看过,但没有真正看到简洁的答案。
【问题讨论】:
您的意思可能是signature
而不是header
- 它将是public Circle()
构造函数的头部是什么意思?
默认构造函数总是无参数的。
@mszymborski: 如果 Circle
是public
。
@T.J.Crowder:谢谢,我不知道。总有一天我得把整个 JLS 都看完。
【参考方案1】:
如果决定为类添加默认构造函数。
您没有决定添加默认构造函数。如果您根本不指定任何构造函数,编译器会为您添加一个。
它添加的那个是由JLS§8.8.9定义的:
如果一个类不包含构造函数声明,则隐式声明一个默认构造函数。***类、成员类或本地类的默认构造函数形式如下:
默认构造函数具有与类相同的可访问性(第 6.6 节)。
默认构造函数没有形式参数,除非在非私有内部成员类中,默认构造函数隐式声明一个形式参数,表示该类的直接封闭实例(第 8.8.1 节、第 15.9.2 节、第15.9.3)。
默认构造函数没有 throws 子句。
如果声明的类是原始类 Object,则默认构造函数的主体为空。否则,默认构造函数只会调用不带参数的超类构造函数。
所以如果Circle
是公开的,那么默认的签名是:
public Circle()
例如,完整生成的版本是:
public Circle()
super();
【讨论】:
非常感谢您抽出宝贵时间提供信息。【参考方案2】:请记住,只有在另一个构造函数不存在时才会添加默认构造函数。因此,如果该类包含 public Circle(String label, int radius),则编译器不会添加默认构造函数。如果需要,您必须自己显式添加此构造函数。
【讨论】:
以上是关于与默认构造函数有关,CMFCPropertyGridProperty的派生类构造函数怎么写的主要内容,如果未能解决你的问题,请参考以下文章