继承类对象C++的类构造函数
您好,我不知道如何为从point类继承的rectangle类创建构造函数。我想让矩形的构造函数接受类point的对象,它在/**/注释中继承类对象C++的类构造函数,c++,inheritance,C++,Inheritance,您好,我不知道如何为从point类继承的rectangle类创建构造函数。我想让矩形的构造函数接受类point的对象,它在/**/注释中 class point { double x_, y_, z_; public: point(const double& a1 = 0, const double& a2 = 0, const double& a3 = 0) { x_ = a1; y_ = a2;
class point
{
double x_, y_, z_;
public:
point(const double& a1 = 0, const double& a2 = 0, const double& a3 = 0)
{
x_ = a1;
y_ = a2;
z_ = a3;
}
double x() const { return x_; }
double y() const { return y_; }
double z() const { return z_; }
double& x() { return x_; }
double& y() { return y_; }
double& z() { return z_; }
};
class rectangle : public point
{
double a_, b_;
public:
rectangle(const double& a1 = 0, const double& a2 = 0, const double& a3 = 0, const double& a4 = 0, const double& a5 = 0) : point(a1, a2, a3)
{
a_ = a4;
b_ = a5;
}
/*
rectangle(point p1, const double& a1, const double& a2)
{
x_ = p1.x();
y_ = p1.y();
z_ = p1.z();
a_ = a1;
b_ = a2;
}
*/
double& a() { return a_; }
double& b() { return b_; }
double a() const { return a_; }
double b() const { return b_; }
double field() const { return a_ * b_; }
};
我还想问一下,我是否能以某种方式融合这两种功能:
double x() const { return x_; }
double& x() { return x_; }
不能在矩形的构造函数中使用x、y和z,因为它们在基类中是私有的。您可以使它们受到保护,也可以简单地使用point类的构造函数:
rectangle(point p1, const double& a1, const double& a2)
: point(p1.x(), p1.y(), p1.z())
{
a_ = a1;
b_ = a2;
}
不能在矩形的构造函数中使用x、y和z,因为它们在基类中是私有的。您可以使它们受到保护,也可以简单地使用point类的构造函数:
rectangle(point p1, const double& a1, const double& a2)
: point(p1.x(), p1.y(), p1.z())
{
a_ = a1;
b_ = a2;
}
使用初始化列表,就像使用第一个构造函数一样:
rectangle(point p1, const double& a1, const double& a2)
: point(p1.x(), p1.y(), p1.z())
{
a_ = a1;
b_ = a2;
}
矩形点p1、常数双精度和a1、常数双精度和a2:点p1
{
a=a1;
b_=a2;
}
使用初始化列表,就像使用第一个构造函数一样:
rectangle(point p1, const double& a1, const double& a2)
: point(p1.x(), p1.y(), p1.z())
{
a_ = a1;
b_ = a2;
}
矩形点p1、常数双精度和a1、常数双精度和a2:点p1
{
a=a1;
b_=a2;
}
你可以逍遥法外
rectangle(point p1, const double& a1, const double& a2) : point(p1), a_(a1), b_(a2) {}
若你们并没有其他的构造函数,那个么你们需要添加
point(const point& other) = default; // copy construcor
在这一点上,您还需要查看您可以侥幸逃脱的
rectangle(point p1, const double& a1, const double& a2) : point(p1), a_(a1), b_(a2) {}
若你们并没有其他的构造函数,那个么你们需要添加
point(const point& other) = default; // copy construcor
此时,您还需要查看,您可以通过以下方式解决此问题:
using Animal::Animal;
在C++双关中有一个使用关键字的构造函数继承。这对我有用
// C++ program to demonstrate inheritance
#include <iostream>
using namespace std;
// base class
class Animal {
public:
explicit Animal(){
cout << "Constructor of Animal called";
}
};
// derived class
class Dog : public Animal {
using Animal::Animal;
public:
Dog(){
cout << "I can bark! Woof woof!!" ;
}
};
int main() {
Animal Obj1; // This will invoke the constructor of Animal class
Dog obj2; // This will also invoke Constructor of Animal class bcz of Using Keyword
return 0;
}
您可以通过以下方式解决此问题:
using Animal::Animal;
在C++双关中有一个使用关键字的构造函数继承。这对我有用
// C++ program to demonstrate inheritance
#include <iostream>
using namespace std;
// base class
class Animal {
public:
explicit Animal(){
cout << "Constructor of Animal called";
}
};
// derived class
class Dog : public Animal {
using Animal::Animal;
public:
Dog(){
cout << "I can bark! Woof woof!!" ;
}
};
int main() {
Animal Obj1; // This will invoke the constructor of Animal class
Dog obj2; // This will also invoke Constructor of Animal class bcz of Using Keyword
return 0;
}
如果您公开double&x{return x_;},只需公开x以及所有其他成员;这是我的教授要求的,然后将代码更改为p1.x=1;。在这种情况下使用函数没有什么好处。同意@Snakerred,通常,拥有一个接口比直接公开内部属性更好。@AdrianMail通常意味着存在不正确的情况,问题中的情况就是其中之一。如果您公开double&x{return x},只需公开x,以及所有其他成员;这是我的教授要求的,然后将代码更改为p1.x=1;。在这种情况下,使用函数没有什么好处。同意@Snakerred的说法,通常情况下,拥有一个接口比直接公开内部属性更好。@AdrianMail通常意味着存在不正确的情况,问题中的情况就是其中之一。