构造函数后面增加冒号一般有三种作用
(1)对成员变量的初始化
(2)对类成员对象初始化
(3)对父类进行初始化
示例1-对成员变量的初始化
#include <stdlib.h>
#include <iostream>
using namespace std;
class A {
private:
int key;
public:
A():key(8) { cout << "A()"<< endl; }
int get_key() { return this->key; }
};
int main ()
{
A a;
cout << a.get_key() << endl;
return 0;
}
答案:
示例2-对类成员对象初始化
#include <stdlib.h>
#include <iostream>
using namespace std;
class B {
private:
int key;
public:
B(int k) { this->key = k; }
int get_key() { return this->key; }
};
class A {
private:
int key;
B b; // 类对象
public:
A():key(8),b(9) { cout << "A()"<< endl; } // 类对象初始化
int get_key() { return this->key; }
int get_bkey() { return this->b.get_key(); }
};
int main ()
{
A a;
cout << a.get_key() << endl;
cout << a.get_bkey() << endl;
return 0;
}
答案:
示例3-对父类进行初始化
#include <iostream>
using namespace std;
class B {
private:
int key;
public:
B(int k) { this->key = k; }
int get_key() { return this->key; }
};
class A : public B {
public:
int value;
A():B(9),value(10) { cout << "A()"<< endl; } // 初始化父类
};
int main ()
{
B *b(new A()); // 通过A类初始化父类
cout << b->get_key() << endl; // 遗留问题,怎么通过b调用子类A的成员变量???
delete b;
return 0;
}
答案: