一,定义类的对象
先定义一个类:
class A
{
public:
A();
virtual ~A();
...
...
};
类实现略。
用的时候:
A a;
a.成员函数;
a.成员变量;
a 就是一个对象。
也可以这样用:
A *a = new A;
a->成员函数;
a->成员变量;
注:
A a; //必须有相应的构造函数函数 比如 A(){},否则应这样定义 A a(10),它的构造函数为 A(int num){ };
A* a; //只是定义了一个指针,不论构造函数怎么样,都会编译过去的;
A* a = new A(10); //定义了一个对象指针,并进行了赋值,在最后要销毁的 delete a;
*********************************************************
二,类的组合:
类的组合就是在一个类中定义另一个类,而不是继承,这样就可以在此类中使用定义的那个类的共用函数和数据;
被定义的类里面如果有需要初始化的数据,那么在类的构造函数中初始化,如
class Print{
public:
Print(int age,char* name){
animal = new Animal(age,name);
}
~Print(){
}
void print_str(){
animal->fun();
}
private:
Animal* animal;
};
*********************************************************
三,类的继承
类的继承就是一个类作为基类,被另一个类继承,如果子类想重新编写基类的一个函数,那么把基类的此函数写成 virtual ,即虚函数;
若直接不想在基类中编写此函数,那么此函数这样写 virtual void func() = 0; 即纯虚函数;
注:包含纯虚函数的类不能被实例化;
*********************************************************
四,类中数据的三个属性:
private: 子类不能直接访问,通过父类的public函数访问;
*********************************************************
五,引用:
直接传递对象名:
一个对象作为实参,传递给一个函数,如果形参为对象名,那么对此对象进行复制拷贝,不会对此对象里面的数据进行操作;
若是形参作为引用来使用,则传递的是此对象的地址,对形参操作就相当与对此对象操作;会对此对象里面的数据进行操作修改;
注:若不想让形参修改,只是使用,则形参这样定义 const Animal& 实例代码如下:
// void reset(Print prin){ //此形参不能修改name的值;
// void reset(const Print& prin){ //此形参不要求修改name的值;编译报错;
void reset( Print& prin){
char buff[] = "halou";
prin.name = buff;
}
*********************************************************
六,C++中string的用法:
string使用时需要加 <string> 头文件,初始化如 string str("hello world");
string的大小判断 int size = str.size();
string是否为空的判断 if(str.empty()){ };
string的追加 str += " very good";
/* 字符转换数字 */
string sint = "123";
int num = atoi(sint.c_str());
cout<<num<<endl;
*********************************************************
七:C++中类内部定义新类,并使用;
类内部的新类调用类内部的private的数据和函数来完成任务;
新定义的类会在当前类内部作为private来使用;
代码实例:
class Dog{
private:
string name_d;
class Print{
public:
Dog* dog;
Print(Dog* dog):dog(dog){
}
~Print(){
}
void print(){
dog->func();
}
};
public:
Print* print;
void print_p(){
print->print();
}
Dog(string name):name_d(name){
if(print == NULL)
print = new Print(this);
}
~Dog(){
}
void func(){
cout<<__func__<<endl;
}
};
int main(int argc,char** argv){
string str("zhangsan");
Dog dog(str);
dog.print->print();
}