因为是新手学习,所以项目里都是写不相关的东西,但这些文件会互相影响。
最头疼的就是经常出现异常直接就终止了。
因为我写新文件中的类名经常是一摸一样的,有时候新文件的类会调用其他文件里的类进而导致各种异常,这到底怎么解决呢?
还有就是每个文件里几乎都有main方法,到底怎么解决呢?我现在只能在之前的文件的main函数上加数字,但好像这种方法也会产生各种异常……
例如:我运行第一个文件,运行的时候会执行第二个文件的类,刚把第二个文件屏蔽生成,第三个文件的类又被第一个文件执行时调用了,绝望啊,这往后还有一大堆文件呢……
#include<iostream>
#include<string>
using namespace std;
class A
{
public:
int first;
};
class B :virtual public A
//vitual关键字变为虚继承
//A是B的虚父类
{};
class C :virtual public A
{};
class D :public B,public C
{};
void test5()
{
D d;
d.B::first;
//d继承了两个first,需要明确是哪一个
//注意d是真的继承了两个int first
cout << sizeof(C) << endl; //4
cout << sizeof(D) << endl; //8
//但有些属性只需要继承一个,为了避免浪费空间,所以需要虚继承
d.B::first = 10;
d.C::first = 20;
d.first = 30;
cout << d.C::first << endl;
cout << d.B::first << endl;
cout << d.first << endl;
//使用虚继承后所有的属性共用一个first,类似于static
//且不再需要加作用域
//虚继承原理为虚父类指针,直接指向虚积累表,虚积累中的偏移量指向唯一的数据
//B类和C类:vbptr -> vbtable -> first,最终都指向first
//而D类继承的其实是vbptr
}
int main()
{
test5();
system("pause");
return 0;
}
第二个文件:
#include<iostream>
#include<string>
using namespace std;
class A
{
public:
A()
{
first = 100;
}
int first;
};
class B
{
public:
B()
{
second = 999;
}
int second;
};
class C :public A, public B
{
public:
C()
{
third = 333;
forth = 666;
}
int third;
int forth;
};
void test4()
{
C c;
cout << "sizeof(c)" << sizeof(c) << endl;
//16 一个A的int 一个B的int 两个自己的int
//同名属性、函数要加作用域
}
int main6()
{
test4();
system("pause");
return 0;
}
第三个文件:
#include<iostream>
#include<string>
using namespace std;
class A
{
public:
A()
{
cout << "A构造" << endl;
}
~A()
{
cout << "A析构" << endl;
}
};
class B : public A
{
public:
B()
{
cout << "B构造" << endl;
}
~B()
{
cout << "B析构" << endl;
}
};
class C : public B
//继承Base类
{
public:
C()
{
cout << "C构造" << endl;
}
~C()
{
cout << "C析构" << endl;
}
};
void test1()
{
C c;
}
int main3()
{
test1();
//ABCCBA
//先进栈后出栈
system("pause");
return 0;
}