সি ++ এ উত্তরাধিকার গঠন করুন


উত্তর:



129

হ্যাঁ. উত্তরাধিকার ডিফল্টরূপে সর্বজনীন।

সিনট্যাক্স (উদাহরণ):

struct A { };
struct B : A { };
struct C : B { };

46

অ্যালেক্স এবং ইভান ইতিমধ্যে যা বলেছে তা ব্যতীত, আমি যুক্ত করতে চাই যে একটি সি ++ স্ট্রাক্ট কোনও সি স্ট্রাক্টের মতো নয়।

সি ++ তে কোনও স্ট্রাক্টে সি ++ শ্রেণির মতো পদ্ধতি, উত্তরাধিকার ইত্যাদি থাকতে পারে।


4
একটি সি ++ স্ট্রাক্ট একটি সি স্ট্রকের মতো হতে পারে। এটি যখন হয়, একে পিওড বলা হয় - সাধারণ ওল্ড ডেটাটাইপ। এটি একটি গুরুত্বপূর্ণ পার্থক্য, যেহেতু উদাহরণস্বরূপ, শুধুমাত্র পিওড স্ট্রাইকগুলি ইউনিয়নের অংশ হতে পারে।
ক্যামহ

9
তবে পিওডিগুলির পদ্ধতি থাকতে পারে, তাই সিগার্সিংয়ের অর্থে সি স্ট্রাক্টগুলি "লাইক" নয়।
স্টিভ জেসোপ

যদি এটি একটি পিওডি হয় তবে এর কোনও পদ্ধতি নেই। অন্যথায় নাম অর্থহীন।
আরএল-এস

24

অবশ্যই. সি ++ তে স্ট্রাক্ট এবং ক্লাসগুলি প্রায় অভিন্ন (প্রাইভেটের পরিবর্তে পাবলিকের কাছে খেলাপি হওয়ার মতো ছোট ছোট পার্থক্যগুলির মধ্যে রয়েছে)।


23

সি ++ তে কোনও কাঠামোর উত্তরাধিকার নিম্নলিখিত পার্থক্য বাদে শ্রেণীর সমান:

শ্রেণি / স্ট্রাক্ট থেকে কোনও কাঠামো উত্পন্ন করার সময়, বেস শ্রেণি / স্ট্রাক্টের জন্য ডিফল্ট অ্যাক্সেস-স্পেসিফায়ার সর্বজনীন। এবং কোনও ক্লাস প্রাপ্ত করার সময়, ডিফল্ট অ্যাক্সেস স্পেসিফায়ার ব্যক্তিগত।

উদাহরণস্বরূপ, প্রোগ্রাম 1 সংকলন ত্রুটির সাথে ব্যর্থ হয় এবং প্রোগ্রাম 2 দুর্দান্ত কাজ করে।

// Program 1
#include <stdio.h>

class Base {
    public:
        int x;
};

class Derived : Base { }; // Is equivalent to class Derived : private Base {}

int main()
{
    Derived d;
    d.x = 20; // Compiler error because inheritance is private
    getchar();
    return 0;
}

// Program 2
#include <stdio.h>

struct Base {
    public:
        int x;
};

struct Derived : Base { }; // Is equivalent to struct Derived : public Base {}

int main()
{
    Derived d;
    d.x = 20; // Works fine because inheritance is public
    getchar();
    return 0;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.