小编tuz*_*zer的帖子

如何在C++中使用成员变量作为默认参数?

我想为其中一个成员函数选择一个参数.如果没有提供参数,它将使用成员变量.

但是,当我尝试编译它时,它显示" 错误:无效使用非静态数据成员'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)

c++ arguments default object

33
推荐指数
3
解决办法
2万
查看次数

如何声明涉及一些简单计算的类的静态常量成员变量?

我试图让一个静态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?

c++ static const class

10
推荐指数
2
解决办法
2万
查看次数

如何有条件地实例化不同的子类?

例如,在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)

c++ inheritance class

7
推荐指数
1
解决办法
3075
查看次数

datetime.now() 的 Python 解析

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 导入时间 …

python windows datetime python-3.4

5
推荐指数
1
解决办法
4070
查看次数

在这种情况下,C++中的union会做什么?

在我正在工作的一个类中,我在头文件中找到了类似的东西:

// 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?删除或添加到结构意味着我必须对涉及联盟中任何其他成员的代码进行相应的更改?

c++ unions

4
推荐指数
1
解决办法
156
查看次数

子类如何调用以不同方式初始化成员变量的父类的构造函数?[C++]

如何在其构造函数中计算子类的成员变量的值,然后传递给父的构造函数?

动机是,如果父类默认构造函数中有很多计算,那么我不想进行那些计算,只是将它们替换为子类后面计算的那些计算.

例如:

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++ inheritance constructor

1
推荐指数
2
解决办法
2万
查看次数