在c++中传递参数给对象-请解释背后的逻辑

  • 本文关键字:解释 背后 对象 c++ 参数 c++
  • 更新时间 :
  • 英文 :


我开始学习c++,现在我迷路了,我看不出其中的逻辑。对我来说简直没有意义我怎么可能向对象添加参数,然后这些参数被程序使用。当然我能记住这个特性,但是有人能解释一下这背后的逻辑吗?c++里的其他东西都是有意义的,我想这句话可能也是有意义的,只是我没有看到它。

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
class Person{
  private:
     string name;
     int age;
  public:
     Person(){
       name = "undefined";
       age = 0;
     };
     Person(string newname){
       name = newname;
       age = 0;
     };
     Person(string newname, int newage){
       name = newname;
       age = newage;
     };
     string toString(){
       stringstream ss;
       ss << "Name is: " << name << " Age is : " << age;
       return ss.str();
    };
 };

int main()
{
  Person person1;
  Person person2("David");  // I don't get this ???
  Person person3("Mia", 35); // // I don't get this ???
  cout << person1.toString() << endl;
  cout << person2.toString() << endl;
  cout << person3.toString() << endl;
  return 0;
};

当你说你在传递参数给对象时,你实际上是在调用构造函数。调用具有匹配签名的构造函数

当你写Person person1;时,默认构造函数是

Person(){
    name = "undefined";
    age = 0;
};


当你写Person person2("David");时,

Person(string newname){
    name = newname;
    age = 0;
};


最后,当你做Person person3("Mia", 35);时,

Person(string newname, int newage){
    name = newname;
    age = newage;
};

这个语句:Person person1;正在调用这个构造函数:

Person();

Person person2("David");正在调用这个构造函数:

Person(string newname);

这个Person person3("Mia", 35);调用了这个构造函数:

Person(string newname, int newage);

由于构造函数是初始化Person类对象的函数,因此它们可以像任何函数一样接收参数。

当你定义一个新的c++类时,它的成员由你选择,这些函数中的每一个都是一个常规变量(或指针,或其他类的实例,等等),这是一个你已经熟悉的概念。

所以当你实例化一个类的新实例时,编译器确切地知道它应该分配多少内存,以及它的内部结构是什么——如何根据类成员将内存分成更小的部分。这就是为什么,当你调用一个构造函数,它知道如何"添加参数"到你的实例。

最新更新