是否可以使用子类的构造函数的初始化列表来初始化在父类中声明为protected的数据成员?我无法让它发挥作用.我可以解决它,但如果我不必这样做会很好.
一些示例代码:
class Parent
{
protected:
std::string something;
};
class Child : public Parent
{
private:
Child() : something("Hello, World!")
{
}
};
Run Code Online (Sandbox Code Playgroud)
当我尝试这个时,编译器告诉我:"类'Child'没有任何名为'something'的字段".这样的事情可能吗?如果是这样,语法是什么?
非常感谢!
我是C++的新手,并试图让一个开源的C++项目在x-code中编译.这段代码的最后两行:
template<typename T>
struct TVector3 : public TVector2<T> {
T z;
TVector3(T _x = 0.0, T _y = 0.0, T _z = 0.0)
: TVector2(_x, _y), z(_z)
Run Code Online (Sandbox Code Playgroud)
抛出错误:成员初始值设定项未命名非静态数据成员
基于(成员初始化程序没有命名非静态数据成员或基类),我尝试将代码更改为:
template<typename T>
struct TVector3 : public TVector2<T> {
T z;
TVector3(T _x = 0.0, T _y = 0.0, T _z = 0.0)
: TVector2(_x, _y)
{ z(_z);}
Run Code Online (Sandbox Code Playgroud)
但我得到了同样的错误.这是超类Vector2的代码.我该如何解决这个错误?
struct TVector2 {
T x, y;
TVector2(T _x = 0.0, T _y = 0.0)
: x(_x), y(_y)
{}
double Length() const …Run Code Online (Sandbox Code Playgroud) 我的一些构造函数有问题。两个子类都需要获得相同的类(没有超类),这就是为什么这些类应该在超类中初始化:
template<typename T, typename S>
class SuperClass {
protected:
OtherClass <T> const& _class1;
OtherOtherClass <T> const& _class2;
SuperClass() {
}
SuperClass(OtherClass<T> const& class1, OtherOtherClass<T> const& class2)
: _class1(class1), _class2(class2)
{
// Alternative I tried:
// this->_class1 = class1;
// this->_class2 = class2;
}
Run Code Online (Sandbox Code Playgroud)
我尝试通过以下方式使用它:
template<typename T, typename S>
class SubClass1 : public SuperClass<T, S> {
private:
someFunc() {
return this->_class1.getSomething(); // as an example
}
public:
SubClass1(OtherClass<T> const& class1,
OtherOtherClass<T> const& class2)
: SuperClass(class1, class2)
{
// some definitions
} …Run Code Online (Sandbox Code Playgroud) 我正在从结构C转向OOP C++,:在C++中声明/定义构造函数时,我经常发现" "符号作为运算符的特殊用法.我粗略地理解了这种风格的使用,但是有人用这个构造函数定义向我解释了精确的编程技术.
例如:1
class time_stamp
{
public:
time_stamp(time &t_time)
: m_time(t_time)
{}
~time_stamp()
{
m_time.update(); // as soon as I'm destroyed, update the time
}
private:
time &m_time;
};
Run Code Online (Sandbox Code Playgroud)
例如:2
class threaded_class
{
public:
threaded_class()
: m_stoprequested(false), m_running(false)
{
pthread_mutex_init(&m_mutex);
}
~threaded_class()
{
pthread_mutex_destroy(&m_mutex);
}
/** Some other member declarations */
}
Run Code Online (Sandbox Code Playgroud)
请解释我:在以下2个例子time_stamp(time &t_time) : m_time(t_time){}和下面的代码行中使用" "
threaded_class(): m_stoprequested(false), m_running(false)
{
pthread_mutex_init(&m_mutex);
}
Run Code Online (Sandbox Code Playgroud)