- C++ 对象中只存成员变量。方法是属于类的(所有方法都一样嘛,也可以理解)。
- C++ 不会默认清理内存,就是说内存使用完,之前的值不会被清除。所以程序再次使用使用到这块内存的时候,它里面的值是不确定的。不一定是0. 所以这就需要程序员自己去初始化这块内存的值。有的语言会自动帮你做这件事。但C++不会,是因为追求效率。
- constructor:如果手动写一个init方法去初始化一些东西不是不可以,但是难保自己或其他人在使用过程中忘记init,constructor是编译器自动去调用的。
- destructor:没有参数,而且构造和析构都没有返回值,不需要加类型,比如void。
class A { A(); //构造,可以有参数 ~A(); //析构,不能有参数 } A::A() { //todo } A::~A() { //todo }
-
int c[] = {1,2,3,4,5}; int numOfC = sizeof c / sizeof *c; // 求c数组元素的个数(c语言知识)
- 在C++中,结构体也可以实现类(把他就认为是类),和类基本相同。唯一差别:如果不写public, private这些访问控制关键字的话,struct 默认 public 。 class 默认 private
struct X { int i; int j; }; X a[2] = {{2,5}, {4,6}}; //给结构体初始化 struct Y { int i; int j; Y(int a); } Y b[] = {Y(1), Y(2)}; //不能直接给变量赋值,必须通过构造函数给i和j赋值。如果只有变量,那么就直接给变量赋值,但是有了构造函数(或者只要有其他函数?)就必须通过构造函数赋值。
Y c[2] = {Y(3)};// 这是错误的,c数组中有两个类(通过结构体实现的),只调用了一个构造函数是不行的,编译器会去找默认的构造函数(default constructor),
//但是找不到(因为需要的是带参数的构造函数,而默认的构造函数是不能有参数的),所以就会报错。(编译器给出的构造函数后面学习是怎么回事)其实啊,想想是这么回事:把2个类存放在数组中,如果类中定义了带参数的构造函数,那么就必须手动调用构造函数去初始化成员变量,因为编译器不可能帮你传参数啊。所以编译器只能调用不带参数的default constructor。
- default constructor : 没有参数的构造函数(自己写在类中的)和编译器给出的构造函数(同样不能有参数)(程序中没有写出来)才是default constructor。有参数的构造函数不是default constructor。
- 子类和父类的关系是:子类包含父类(完全包含,包括私有成员,只是不能进行操作,必须通过父类提供的方法才能操作)。父类中的私有成员是子类不能访问的,但是如果父类中提供了方法可以访问或设置私有成员变量,那么子类可以通过这些方法去访问或设置私有成员变量。
class A { private: int i; public: A():i(5) {} // initialization list ~A() {//todo destruct} getI() {cout << i << endl;} protected: setI (int a) {i = a;} } //继承 class B : public A { // todo business logic public: getII() {cout << i << endl;} } void main() { B b; b.getI(); //继承A的方法,使用A的方法访问私有成员变量可以,当然前提是方法是public 或 protected的 // b.getII(); //通过自己定义的方法去访问私有成员变量i不行
b.setI(11); //父类中提供的设置i的方法可以使用
}这个就好比提供setter 和 getter 让外部去设置和访问私有成员变量一样。protected 是只让子类去访问和设置私有成员变量。如果父类没有提供getter 和 setter ,那么这个私有成员变量只能自己操作。不论是外部还是子类都无权操作。