我开始学习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++类时,它的成员由你选择,这些函数中的每一个都是一个常规变量(或指针,或其他类的实例,等等),这是一个你已经熟悉的概念。
所以当你实例化一个类的新实例时,编译器确切地知道它应该分配多少内存,以及它的内部结构是什么——如何根据类成员将内存分成更小的部分。这就是为什么,当你调用一个构造函数,它知道如何"添加参数"到你的实例。