与默认构造函数有关,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: 如果 Circlepublic @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的派生类构造函数怎么写的主要内容,如果未能解决你的问题,请参考以下文章

JAVA笔试题(与构造函数、静态变量有关)

JAVA笔试题(与构造函数、静态变量有关)

什么是默认构造函数头[重复]

试图创建一个线程来向套接字发送消息。遇到与线程构造函数有关的 2 个错误

C++中,一个类,究竟有多少隐藏的默认函数?

C++的默认构造函数与构造函数