一、public和private的使用
public的意思是,这个成员哪里都可以用,不用担心被修改,所以,一旦发布成public的成员,是不能够改名字的.
private的意思是,这个成员只用于内部使用,不要在其他的地方使用.
二、大小
私有方法不允许外部访问,但是也占空间
struct Test
{
private:
int x;
public:
int y;
};
printf("%d\n",sizeof(Test)); //大小为8
三、private访问
指针访问
struct Test
{
private:
int x;
public:
int y;
void Init(int x,int y)
{
this->x = x;
this->y = y;
}
};
Test t;
t.Init(1,2);
int* p = (int*)&t;
int n = *p;
int m = *(p+1);
printf("%d %d\n",n,m);
private修饰的成员与普通的成员没有区别 只是编译器会检测.(不让你直接访问)
private修饰的成员只有自己的其他成员才能访问
四、class与struct的区别:
编译器默认class中的成员为private 而struct中的成员为public
class Base
{
int x;
int y;
};
int main(int argc, char* argv[])
{
Base base;
base.x = 10; //编译不了
base.y = 20;
return 0;
}
五、类的继承
class Base
{
public:
int x;
int y;
};
class Sub:Base
{
public:
int a;
int b;
};
int main(int argc, char* argv[])
{
Sub sub;
sub.x = 1; //无法访问
sub.y = 2; //无法访问
sub.a = 3;
sub.b = 4;
return 0;
}
父类中的程序继承后变成private属性
如果不希望改变成员的属性:
class Base
{
public:
int x;
int y;
};
class Sub:public Base
{
public:
int a;
int b;
};
int main(int argc, char* argv[])
{
Sub sub;
sub.x = 1;
sub.y = 2;
六、private是否被继承
class Base
{
public:
Base()
{
x = 11;
y = 12;
}
private:
int x;
int y;
};
class Sub:Base
{
public:
int a;
int b;
};
int main(int argc, char* argv[])
{
Sub sub;
printf("%d\n",sizeof(sub)); //16 私有方法被继承过来了
return 0;
}
七、构造函数继承
1、当你创建对象时,你不提供一个构造函数,编译器会自动跟你提供一个
2、如果子类继承父类,子类的构造函数会调用父类的构造函数
class Base
{
public:
Base()
{
x = 11;
y = 12;
}
private:
int x;
int y;
};
class Sub:Base
{
public:
int a;
int b;
};
int main(int argc, char* argv[])
{
Sub sub;
sub.a = 1;
sub.b = 2;
int* p = (int*)⊂
printf("%d\n",sizeof(sub));
printf("%d\n",*(p+0));
printf("%d\n",*(p+1));
printf("%d\n",*(p+2));
printf("%d\n",*(p+3));
return 0;
}