class person
{
public:
/*传统初始化操作
person(int a, int b, int c)
{
m_a = a;
m_b = b;
m_c = c;
}*/
//初始化列表初始化属性
person(int a,int b,int c) :m_a(a), m_b(b), m_c(c)
{
}
int m_a;
int m_b;
int m_c;
};
void test01()
{
//person p(10, 20, 30);
person p(30,20,10);
cout << "m_a=" << p.m_a << endl;
cout << "m_b=" << p.m_b << endl;
cout << "m_c=" << p.m_c << endl;
}
int main()
{
test01();
类作为成员变量
class phone
{
public:
phone(string pname)
{
m_pnname = pname;
}
string m_pnname;
};
class person
{
public:
//phone m_phone = pname 隐式转换法
person(string name, string pnname) :m_name(name), m_phone(pnname)
{
}
string m_name;
phone m_phone;
};
//当其他类对象作为本类成员,构造时先构造其他类再构造本类,析构顺序相反
void test01()
{
person p("张三", "苹果max");//
cout << p.m_name << "拿了"<<p.m_phone.m_pnname << endl;
}
int main()
{
test01();
//静态成员函数
//所有对象共享同一个函数
//静态成员函数只能访问静态成员变量
class person
{
public:
//静态成员函数
static void func()
{
m_a = 100;//静态成员函数可以访问静态变量 公用的
//m_b = 200;报错,因为静态成员变量 不可以访问 非静态成员变量 无法区分到底是哪个对象的m_b属性
cout << "static void func调用" << endl;
}
static int m_a;//静态成员变量
int m_b;//非静态成员变量
//静态成员函数也是有访问权限的
private:
static void func2()
{
cout << "static void func2调用" << endl;
}
};
int person::m_a = 0;
//两种访问方式
void test01()
{
//1.通过对象来访问
person p;
p.func();
//2.通过类名来访问
person::func();
//person::func2();类外访问不到私有静态成员函数
}
int main()
{
test01();
//成员变量 和 成员函数 分开存储的
class person
{
int m_a;//非静态成员变量 属于类的对象上的
static int m_b;//静态成员变量 不属于类的对象上
void func() {}//非静态成员函数 4 不属于类的对象上的
static void func2() {}//静态成员函数 不属于类的对象上的
};
int person::m_b = 0;
void test01()
{
person p;
//空对象占用内存空间:1
//c++编译器会给每个空对象也分配一个字节空间,是为了区分空对象占内存的位置 每一个空对象也应该有一个独一无二的内存地址
cout << "size of p=" << sizeof(p) << endl;
}
void test02()
{
person p;
cout << "size of p=" << sizeof(p) << endl;//4
}
int main()
{
test01();
test02();