我想为其中一个成员函数选择一个参数.如果没有提供参数,它将使用成员变量.
但是,当我尝试编译它时,它显示" 错误:无效使用非静态数据成员'Object :: initPos' "
只是为了隔离问题,我尝试默认一个int类型,它编译得很好.我想知道我的代码有什么问题,以及如何使用成员函数作为默认值.
谢谢您的帮助!
Object.h
class Object
{
public:
...
void MoveTo(double speed, Point position);
protected:
Point initPos;
Point currPos;
};
Run Code Online (Sandbox Code Playgroud)
Object.c
void Object::MoveTo(double speed, Point position = initPos)
{
currPos = postion;
}
Run Code Online (Sandbox Code Playgroud)
Point.h
class Point
{
...
private:
double x;
double y;
double z;
};
Run Code Online (Sandbox Code Playgroud) 我试图让一个静态const成员变量与一个类中的另一个静态const变量相关.动机是如果我需要稍后修改一个值(编码时),我不需要逐个更改所有彼此相关的值.
例如:
class Box
{
public:
Box();
private:
static const double height = 10.0;
static const double lid_height = 0.5 + height;
};
Run Code Online (Sandbox Code Playgroud)
它不会编译,错误是"Box :: height"不能出现在常量表达式中.所以我猜你必须输入一个静态const成员的值.但是有没有办法让一个成员与同一个类的另一个成员变量相关,因为它们都是静态const?
例如,在main函数中,我想获取用户的输入.根据输入,我将创建a Rectangle或a Circle,它们是子类Object.如果没有输入(或未知),那么我将只创建一个通用对象.
class Object
{
public:
Object();
void Draw();
private:
....
};
class Rectangle:public Object
{
public:
Rectangle();
.... //it might have some additional functions
private:
....
};
class Circle:public Object
{
public:
Circle();
.... //it might have some additional functions
private:
....
};
Run Code Online (Sandbox Code Playgroud)
主功能:
string objType;
getline(cin, objType);
if (!objType.compare("Rectangle"))
Rectangle obj;
else if (!objType.compare("Circle"))
Circle obj;
else
Object obj;
obj.Draw();
Run Code Online (Sandbox Code Playgroud)
当然,上面的代码不起作用,因为我不能在If语句中实例化一个对象.所以我试过这样的事情.
Object obj;
if (!objType.compare("Rectangle"))
obj = Rectangle();
else if (!objType.compare("Circle"))
obj = …Run Code Online (Sandbox Code Playgroud) from datetime import datetime
import time
for i in range(1000):
curr_time = datetime.now()
print(curr_time)
time.sleep(0.0001)
Run Code Online (Sandbox Code Playgroud)
我正在测试 的分辨率datetime.now()。由于它应该以微秒为单位输出,因此我预计每次打印都会有所不同。
然而,我总是得到类似的东西。
...
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.212073
2015-07-10 22:38:47.213074
2015-07-10 22:38:47.213074
2015-07-10 22:38:47.213074
2015-07-10 22:38:47.213074
2015-07-10 22:38:47.213074
2015-07-10 22:38:47.213074
2015-07-10 22:38:47.213074
2015-07-10 22:38:47.213074
2015-07-10 22:38:47.213074
2015-07-10 22:38:47.213074
2015-07-10 22:38:47.213074
...
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况?有什么方法可以获得精确到微秒的时间戳吗?实际上我不需要微秒,但能获得 0.1 毫秒的分辨率就很好了。
===更新====
我将其与使用 time.perf_counter() 进行比较,并添加到起始datetime
日期时间导入日期时间、timedelta 导入时间 …
在我正在工作的一个类中,我在头文件中找到了类似的东西:
// Flags
union
{
DWORD _flags;
struct {
unsigned _fVar1:1;
unsigned _fVar2:1;
unsigned _fVar3:1;
unsigned _fVar4:1;
};
};
Run Code Online (Sandbox Code Playgroud)
在某些类的成员函数中,我看到_flags直接设置为_flags = 3;.我也看到结构中的成员被直接设置,喜欢_fVar1 = 0和被比较.
我试图消除_fVar1,我不知道它会做,而其他地方_flags和其他_fVar#被访问或设置.例如,设置是否_flags = 3意味着_fVar1并且_fVar2将为1 _fVar3并且_fVar4将为0?删除或添加到结构意味着我必须对涉及联盟中任何其他成员的代码进行相应的更改?
如何在其构造函数中计算子类的成员变量的值,然后传递给父的构造函数?
动机是,如果父类默认构造函数中有很多计算,那么我不想进行那些计算,只是将它们替换为子类后面计算的那些计算.
例如:
Car.h
class Car
{
public:
Car();
Car(double Price) ;
...
private:
double price;
double DetermineMarketPrice();
};
Run Code Online (Sandbox Code Playgroud)
Car.cpp
Car::Car()
{
//some other long computation
price = DetermineMarketPrice();
}
Car::Car(double Price)
{
price = Price;
}
...
Run Code Online (Sandbox Code Playgroud)
Porche.h
class Porche : public Car
{
public:
Porche();
...
private:
double price;
double discount;
double fee;
double DetermineMarketPrice();
double RetrieveFee();
double CheckDiscount();
...
};
Run Code Online (Sandbox Code Playgroud)
Porche.cpp
Porche::Porche():Car(price)
{
discount = CheckDiscount();
fee = = RetrieveFee();
price = DetermineMarketPrice() * (1-discount) + fee; …Run Code Online (Sandbox Code Playgroud) c++ ×5
class ×2
inheritance ×2
arguments ×1
const ×1
constructor ×1
datetime ×1
default ×1
object ×1
python ×1
python-3.4 ×1
static ×1
unions ×1
windows ×1