21xrx.com
2024-09-20 05:40:14 Friday
登录
文章检索 我的文章 写文章
C++中子对象和成员对象的区别和使用方法
2023-07-04 21:28:28 深夜i     --     --
C++ 子对象 成员对象 区别 使用方法

在C++编程中,我们经常遇到子对象和成员对象的概念。虽然二者可能看起来很相似,但是它们具有不同的含义和用法。

成员对象指的是由类组合而成的一个对象,其类型可以是内置数据类型、自定义类对象或指向对象的指针。成员对象在类的构造函数中被初始化,并可以在类中被访问和修改。例如,以下是一个成员对象的示例:


class Person {

private:

  string name;

  int age;

public:

  Person(string n, int a) : name(n), age(a) {}

};

class Student {

private:

  Person info; // Person是Student的一个成员对象

public:

  Student(string n, int a) : info(n, a) {}

};

在上面的示例中,Person是Student的一个成员对象。在构造函数中调用了Person的构造函数完成了初始化。

子对象是一个对象所属类的基类或派生类对象。在继承关系中,在子类的对象中,通常需要包含基类的对象。例如:


class Animal {

public:

  void breathe() {}

};

class Mammal : public Animal {

public:

  void eat() {}

};

class Cat : public Mammal {

public:

  void meow() {}

};

int main() {

  Cat cat;

  cat.breathe(); // Animal是Cat的一个子对象,因此Cat对象可以调用Animal的成员函数

  cat.eat();

  cat.meow();

}

在上面的示例中,Animal是基类,Mammal是派生自Animal的子类,而Cat是又派生自Mammal的子类。因此,Cat对象有一个Animal子对象和一个Mammal子对象。

在C++中,通过使用一个派生类的构造函数来初始化其基类的子对象。例如:


class Animal {

public:

  void breathe() {}

};

class Mammal : public Animal {

public:

  Mammal(int age) : Animal(), age_(age) {}

  void eat() {}

private:

  int age_;

};

class Cat : public Mammal {

public:

  Cat(int age, string name) : Mammal(age), name_(name) {}

  void meow() {}

private:

  string name_;

};

int main() {

  Cat cat(1, "shadow");

  cat.breathe();

  cat.eat();

  cat.meow();

}

在上面的示例中,Cat通过Mammal的构造函数初始化了Animal的子对象。在Cat对象中,可以直接访问Mammal和Animal的成员函数和变量,同时也可以调用Cat自己的成员函数和变量。

总的来说,成员对象和子对象在C++中扮演着不同的角色。理解这两者的区别和用法对编写复杂的类和程序至关重要。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复