我开始学习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;
};
答案 0 :(得分:3)
当您说您将参数传递给对象时,您实际上正在调用构造函数。调用匹配签名的构造函数。
当您编写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;
};
被召唤。
答案 1 :(得分:1)
当您定义一个新的C ++类时,将其成员作为您的选择,这些类中的每一个都作为常规变量(或指针,或其他类的实例等),这是您已经熟悉的概念。
因此,当您实例化类的新实例时,编译器确切地知道它应该分配多少内存,以及它的内部结构是什么 - 如何将该内存划分为与类成员相对应的较小部分。 这就是,当你调用构造函数时,它知道如何“为你的实例添加参数”。
答案 2 :(得分:1)
此声明:Person person1;
正在调用此构造函数:
Person();
这个Person person2("David");
正在调用这个构造函数:
Person(string newname);
这个Person person3("Mia", 35);
正在调用这个构造函数:
Person(string newname, int newage);
由于构造函数是函数,它初始化类Person的对象,因此它们可以像任何函数一样接收参数。