1.继承this的问题
#include <iostream>
class A {
private:
int a;
public:
void setA(int a_) {
this->a = a_;
}
void printfA(){
printf("a:%d\n",this->a);
}
};
class B : public A {
};
int main(){
B b;
b.setA(12);
b.printfA();
}
比如上面这段代码,在调用setA的时候,this指的是什么?指的是B对象还是A对象。很明显我们声明的是B对象。
其实this指的是B对象,这是因为B虽然啥都没写,但是其实把代码都继承了过来,继承解决的是代码复用的问题
所以你看着是在b.setA(),好像是调用class A的方法。其实是这样:
#include <iostream>
class A {
private:
int a;
public:
void setA(int a_) {
this->a = a_;
}
void printfA(){
printf("a:%d\n",this->a);
}
};
class B : public A {
private:
int a;
public:
void setA(int a_) {
this->a = a_;
}
void printfA(){
printf("a:%d\n",this->a);
}
};
int main(){
B b;
b.setA(12);
b.printfA();
}
当继承有重名变量
#include <iostream>
class Parent {
public:
int mi;
void add(int v){
mi += v;
}
void add(int a, int b) {
mi += (a+b);
}
};
class Child : public Parent {
public:
int mi;
void print()
{
std::cout << mi << std::endl;
}
};
int main(){
Child c;
c.mi = 1;
c.add(1);
c.print(); //1
return 0;
}