一.构造器和析构器
1.构造器的定义格式为ClassName(),析构器的定义格式为~ClassName()
2.每一个类至少有一个构造器,如果没有,编译器会使用以下语法定义:ClassName::ClassName(){}
3.析构器是可有可无的(可能引起内存泄漏)
二.this指针和类的继承
1.
class Human{
char fishc;
Human(char fishc);
}
Human::Human(char fishc){
fishc=fishc;
}
可以看出两个fishc编译器无法区分清楚,这时候就需要用到this指针。
——this->fishc=fishc;(赋值操作符的左边将被解释为当前对象的fishc树形,右边被解释为构造器的传入来的fishc参数)
2.将基类和子类的继承关系转化为C++代码
——class SubClass:public SuperClass{}
三.继承机制中的构造器和析构器
1.
Animal::Animal(std::string theName){
name=theName
}
Pig::Pig(std::string theName):Animal(theName){
}
2.对构造器与析构器进行更进一步的理解(继承机制中的构造器与析构器)eg
#include<iostream>
#include<string>
class Baseclass
{
public:
Baseclass();
~Baseclass();
void doSomething();
} ;
class Subclass:public Baseclass
{
public:
Subclass();
~Subclass();
};
Baseclass::Baseclass()
{
std::cout<<"进入基类构造器。。。\n";
std::cout<<"我在基类构造器里干了某些事。。。\n\n";
}
Baseclass::~Baseclass()
{
std::cout<<"进入基类析构器。。。\n";
std::cout<<"我在基类析构器里也干了某些事。。。\n\n";
}
void Baseclass::doSomething()
{
std::cout<<"我干了某些事。。。\n\n";
}
Subclass::Subclass()
{
std::cout<<"进入子类构造器。。。\n";
std::cout<<"我在子类构造器里干了某些事。。。\n\n";
}
Subclass::~Subclass()
{
std::cout<<"进入子类析构器。。。\n";
}
int main()
{
Subclass subclass;
subclass.doSomething();
std::cout<<"结束程序\n";
return 0;
}
编译出后:
三.访问控制
级别 | 允许谁来访问 |
public | 任何代码 |
protected | 这个类本身和它的子类 |
private | 只有这个类本身 |
(注:只要在类里的某个地方写出一个访问级别并在其后加上一个冒号,从那个地方开始往后的所有方法和属性都将受到相应的保护,直到遇到下一个访问级别或者到达这个类的末尾为止)
四.覆盖方法和重载方法
1.关于从基类继承来的方法和保护:
——class Pig:public Animal{...}
C++不仅允许你对在类里定义的方法和属性实施访问控制,还允许你控制子类可以访问基类里的哪些方法和属性。
public
-是在告诉编译器:继承的方法和属性的访问级别不发生任何改变,即public仍可以被所有代码访问,protected只能由基类的子类访问,private则只能由基类本身访问。
protected
-把基类的访问级别改为protected,如果原来是public的话,这将使得这个子类外部的代码无法通过子类去访问基类中的public
private
-是在告诉编译器从基类继承来的每一个成员都当成private来对待,这意味着只有这个子类可以使用它从基类继承来的元素
2.覆盖方法(当我们在基类里提供一个通用的函数,但在它的某个子类里需要修改这个方法的实现)
——在类里重新声明这个方法,然后再改写一下它的实现代码(就像它是一个增加的方法那样)就行啦
3.重载机制使你可以定义多个同名的方法(函数),只是它们的输入参数必须不同。(因为编译器是依靠不同的输入参数来区分不同的方法)
五.
1.友元关系(一个完全无关的类由于某些特殊原因需要访问到某个protected甚至是private成员)
友元关系是类之间的一种特殊关系,这种关系不仅允许友元类访问对方的public方法和属性,还允许友元访问对方的protected和private方法和属性。
2.声明友元关系的语法
——在类声明里的某个地方加上一条friend class**就行了
六.
1.虚方法
int *pointer=new int;
*pointer=110;
std::cout=110;
std::cout<<*pointer;
delete pointer;
最后一步非常必要和关键,这是因为程序不会自动释放内存,程序中的每一个new操作都必须有一个与之对应的delete操作!
2.