class Base
{
public:
virtual void foo()
{}
};
class Derived: public Base
{
public:
virtual void foo()
{}
};
int main()
{
Base *pBase = NULL;
Base objBase;
Derived objDerived;
pBase = &objDerived;
pBase->foo();
/*Here Derived class foo will be called, but i want this to call
a base class foo. Is there any way for this to happen? i.e. through
casting or something? */
}
Run Code Online (Sandbox Code Playgroud) 我一直在阅读很多关于C++演员的内容,我开始感到困惑,因为我总是使用C风格的演员.
我已经读过在C++中应该避免C样式转换,并且reinterpret_cast是非常危险的,并且只要有替代方法就不应该使用它.相反,不使用reinterpret_cast,我已经看到它在样本代码中在MSDN上多次使用.这导致我问我的第一个问题,什么时候可以使用reinterpret_cast?
例如:
LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch (Msg)
{
case WM_CREATE:
{
LPCREATESTRUCT lpCreateStruct = reinterpret_cast<LPCREATESTRUCT>(lParam);
return 0;
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
如果这不好,那么我如何仅使用静态,动态和/或const转换将LPARAM值转换为指针?
另外:如果reinterpret_cast不可移植,我将如何将其重写为便携式(为了良好实践)
我有一个const指针指向一个指针Fred,我不明白为什么一个static_cast是不够的.
typedef struct {
int n;
} Fred;
Fred *pFred;
Fred **const ppFred = &pFred;
void **const ppVoid = static_cast<void ** const>(ppFred);
Run Code Online (Sandbox Code Playgroud)
请有人能解释为什么reinterpret_cast需要一个指针转换Fred*为指针void*,但是static_cast是精指针转换Fred为指针void.
放置#pragma once包含防护装置内部而不是外部防护装置之间有什么区别吗?
情况1:
#ifndef SOME_HEADER_H
#define SOME_HEADER_H
#pragma once
Run Code Online (Sandbox Code Playgroud)
案例2:
#pragma once
#ifndef SOME_HEADER_H
#define SOME_HEADER_H
Run Code Online (Sandbox Code Playgroud)
我只是出于好奇而想知道是否有任何特殊情况我应该更喜欢其中一个(案例1或案例2),因为我决定在我的代码中将两者(pragma和header guard)结合起来.
编辑:
我想你们都误解了我的问题......我问的是一个地方pragma once,而不是pragma曾经-vs-标题守卫.
我有一个列需要填充ture/false /(N/A)数据.此列是select语句的一部分所以,我该如何实现这一目标?
SELECT distinct
program_id,
prog_name,
Eitc_Active_Switch as Prog_Status,
progmap.client_id,
progmap.ORG_ID,
sec.calwinexists_ind as interface,
sec.Client_name
FROM ref_programs prog (nolock)
LEFT OUTER JOIN ref_county_program_map progmap (nolock)
ON progmap.program_id=prog.prog_id AND progmap.CLIENT_ID=prog.CLIENT_ID
INNER join sec_clients sec (nolock)
on sec.client_id=progmap.Client_id
Run Code Online (Sandbox Code Playgroud)
'sec.calwinexists_ind as interface'是列.只应显示三条记录(AMC,AMBD,ACMNI)的真/假,其余记录只显示"N/A"
谁能帮我?
IndexOf,IndexOfAny而且LastIndexOf,LastIndexOfAny似乎没有这些(或者他们可能).我正在寻找std :: string find_first_not_of和find_last_not_of.的公差.我正在考虑创建一个扩展类,但我不确定C#是否已经提供了这个功能.
当点击"记录"按钮时,我正在广播一个意图.传递一个布尔变量,显示录制是否已开始.生成意图的代码是:
Intent recordIntent = new Intent(ACTION_RECORDING_STATUS_CHANGED);
recordIntent.putExtra(RECORDING_STARTED, getIsRecordingStarted());
sendBroadcast(recordIntent);
Run Code Online (Sandbox Code Playgroud)
为了测试这段代码,我在测试中注册了一个接收器.收到意图但传递的变量不一样.如果我调试代码,我可以看到该值与发送时相同,但是当我得到它时,它的值不同.
@Test
public void pressingRecordButtonOnceGenerateStartRecordingIntent()
throws Exception {
// Assign
AppActivity activity = new AppActivity();
activity.onCreate(null);
activity.onResume();
activity.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent intent) {
// Assert
ShadowIntent shadowIntent = Robolectric.shadowOf(intent);
assertThat(shadowIntent
.hasExtra(AppActivity.RECORDING_STARTED),
equalTo(true));
Boolean expected = true;
Boolean actual = shadowIntent.getExtras().getBoolean(
AppActivity.RECORDING_STARTED, false);
assertThat(actual, equalTo(expected));
}
}, new IntentFilter(
AppActivity.ACTION_RECORDING_STATUS_CHANGED));
ImageButton recordButton = (ImageButton) activity
.findViewById(R.id.recordBtn);
// Act
recordButton.performClick();
ShadowHandler.idleMainLooper();
}
Run Code Online (Sandbox Code Playgroud)
我也测试了实际的意图,而不是它的阴影,但结果相同
我有两节课:
class x {
public:
virtual void hello() {
std::cout << "x" << std::endl;
}
};
class y : public x {
public:
void hello() {
std::cout << "y" << std::endl;
}
};
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么以下两个调用hello()打印不同的消息?他们为什么不打印"y"?是因为第一个是副本而第二个实际指向内存中的对象?
int main() {
y a;
x b = a;
b.hello(); // prints x
x* c = &a;
c->hello(); // prints y
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我很好奇你抛出一个代码后如何维护你的代码System.ComponentModel.InvalidEnumArgumentException.
基本上我有一个这样的开关语句:
switch (enumValue)
{
case MyEnum.Value1:
break;
case MyEnum.Value2:
break;
default:
throw new InvalidEnumArgumentException();
}
Run Code Online (Sandbox Code Playgroud)
如果我决定什么更值添加到MyEnum在未来,例如,Value3和Value4?这意味着我最终会抛出一个误导性的例外.我该如何防止这种情况?
投掷前我应该使用反射吗?在这种情况下我应该抛出什么异常?我正在寻找建议.
我刚刚在几分钟前发现了这个例外,所以也许我在错误的背景下看这个.如果不支持某个枚举参数(在这种情况下Value3并且Value4不支持),是否抛出此异常?
我有一个具有多个@onetomany关系的对象,我需要查询父项中的属性以及子项的属性.我似乎无法完成它.
例如,我需要一个查询,让我看到父对象,其中父级的名称是"John" ,而孩子的最喜欢的颜色是蓝色.希望有道理.复杂化的原因似乎是儿童在列表中,而不是在@onetoone关系中.
PARENT:
@Entity
@Table(name="Parent")
public class Parent {
@Id
@Column(name="ID")
@GeneratedValue(strategy=GenerationType.AUTO, generator="parent_gen")
@SequenceGenerator(name="parent_gen", sequenceName="PARENT_SEQUENCE")
private int parentID;
@Column(name="name")
private String name;
@OneToMany(cascade=CascadeType.ALL)
@OrderBy("name ASC")
@JoinTable(name = "parent_to_child")
private List<Child> childList;
// and so forth
Child
@Entity
@Table(name="Child")
public class Child{
@Id
@Column(name="ID")
@GeneratedValue(strategy=GenerationType.AUTO, generator="child_gen")
@SequenceGenerator(name="child_gen", sequenceName="CHILD_SEQUENCE")
private int childID;
@Column(name="favoriteColor")
private String favoriteColor;
// and so forth
Run Code Online (Sandbox Code Playgroud) c++ ×5
c# ×2
android ×1
c ×1
casting ×1
hibernate ×1
hql ×1
if-statement ×1
java ×1
parent ×1
polymorphism ×1
robolectric ×1
select ×1
sql ×1
static-cast ×1
string ×1
unit-testing ×1