1

具体的にはObjective-Cで、基本クラスで継承されたクラスを使用することは可能ですか?例:

Class BaseClass
{
  InheritedClass memberVariable;
}

Class InheritedClass : BaseClass
{
  // implementation goes here
}

編集:より詳細な説明:

あなたが持っている現実の世界の状況を想像してください

Album:
- Title
- Artist

Song:
- Title
- Artist
- Duration

したがって、次のように、Album クラスは Song クラスの基底クラスになることができます。

Class Album
{
  Title;
  Artist;
}

Class Song : Album
{
  Duration;
}

ここで、アルバムの曲を Album クラスに保存する必要がある場合は、次のようになります。

Class Album
{
  Title;
  Artist;
  Songs[];
}

または、私は一般的に間違っているか、いくつかの基本が欠けていますか?

4

2 に答える 2

1

はい、クラスがインスタンス変数 (メンバー変数と呼ぶものを表す ObjC 用語)、または型がそれ自体のサブクラスであるプロパティを持つことはまったく問題ありません。

以下は、Objective-C で求めているようなものを示す、単純でコンパイル可能なプログラムです。

#import <Foundation/Foundation.h>

@class Song;

@interface Album : NSObject
    @property (strong) NSString *artist;
    @property (strong) NSString *title;
    @property (strong) NSArray *songs; 
    @property (strong) Song *bestSong;
@end

@interface Song : Album
    @property (weak) Album *album;
    @property NSTimeInterval duration;
@end

@implementation Album
@end

@implementation Song
@end

int main(int argc, char *argv[]) {
    @autoreleasepool {
        Album *album = [[Album alloc] init];
        Song *song1 = [[Song alloc] init];
        Song *song2 = [[Song alloc] init];
        album.songs = @[song1, song2];
        album.bestSong = song1;
        song1.album = album;
        song2.album = album;

        NSLog(@"Album: %@", album);
        NSLog(@"songs: %@", album.songs);
        NSLog(@"bestSong: %@", album.bestSong);
    }
}

出力:

Album: <Album: 0x7fcc3a40a3e0>
songs: (
    "<Song: 0x7fcc3a40a5e0>",
    "<Song: 0x7fcc3a40a670>"
)
bestSong: <Song: 0x7fcc3a40a5e0> bestSong: <Song: 0x7ff48840a580>
于 2013-02-13T23:38:11.207 に答える
1

可能ですが、C++ で可能なようにオブジェクトを保存することはできません。オブジェクトへのポインターを保存する必要があります。

Class BaseClass
{
    InheritedClass* memberVariable;
}

次に、ポインターは InheritedClass オブジェクトを指す場合があります。

于 2013-02-13T21:47:40.040 に答える