Как определить конструктор в классе со структурой в качестве члена данных в с ++? - PullRequest
0 голосов
/ 09 июля 2020

Я создал структуру как член данных в классе. Теперь я хочу создать конструктор, которому я передам свои элементы данных. Как передать структуру в конструктор.

Я написал этот код, но он не работает.

#include <iostream>
#include <cmath>
using namespace std;
class circle
{
    private:
        struct center
        { 
            int xcord;
            int ycord;
        };
        struct center cordinate;
        float radius;
    public:
        circle()
        {
            cordinate.xcord=0;
            cordinate.ycord=0;
            radius=0;
        };
        circle(int x, int y, float r) : cordinate.xcord(x), cordinate.ycord(y), radius(r)
        {};
        void showdata()
        {
            cout<<"Center(x,y) = ("<<cordinate.xcord<<","<<cordinate.ycord<<")"<<endl;
            cout<<"Radius = "<<radius<<endl;
        }
};
int main()
{
    circle c1;
    c1.showdata();
}

Или, если бы я написал его вот так, он все равно не работает.

circle(int x, int y, float r) : center.xcord(x), center.ycord(y), radius(r)
        {};

или

circle(int x, int y, float r) : center.cordinate.xcord(x), center.cordinate.ycord(y), radius(r)
        {};

Как передать структуру конструктору?

1 Ответ

3 голосов
/ 09 июля 2020

Вы можете инициализировать член cordinate следующим образом:

circle(int x, int y, float r) : cordinate{x, y}, radius{r} {}

Кроме того, ваш конструктор по умолчанию может быть упрощен до:

circle() : circle(0, 0, 0) {}

, который делегирует конструктору с 3 аргументами . Еще лучше, просто используйте инициализаторы членов класса для всех полей:

struct center
{ 
   int xcord = 0;
   int ycord = 0;
} cordinate;
float radius = 0;

, а затем вы можете использовать конструктор по умолчанию по умолчанию:

circle() = default;

Вот демонстрация .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...