class A
{
public:
void print()
{
cout<<"A"<<endl;
}
};
class B:public A
{
public:
void print() //不是覆盖(overide)也不是重载(参数签名不同,函数名相同);而是子类方法隐藏父类方法。
{
cout<<"B"<<endl;
}
};
class C:public A
{
public:
void print(int i) //见后面,相当牛逼。也是隐藏。 C++中 父类和子类的同名函数,无法重载(但是加virtual,签名相同可以覆盖)
{
cout<<"C"<<endl;
}
};
//////////////////////////
class D
{
public:
D():a(1),b(a) //引用和const都必须在初始化列表中赋值
{
//a=1; 这样错误的,只有才参数列表中才有机会赋值
}
void print()
{
cout<<a<<endl;
}
private:
const int a;
const int &b;
};
//////////////////////////
char* my_strcat(char* dst,const char* src) //返回值链式操作,第二个参数是常型
{
if(dst==NULL || src==NULL) //边界保护
return NULL;
char *tmp=dst;
while(*++dst);
while((*dst++=*src++));
*dst='/0';
return tmp; //所以说指针变量只是一个数字而已,这个数字表示一个内存地址;
}
//reinterpret_cast
////////////////////////////
class E
{
private:
char a,b,c;
};
class F
{
};
class G
{
public:
virtual void print()=0; //4个字节,然后必须是4的倍数
private:
//E e;
char a,b;
//int c;
}; //sizeof(G) = 8
int main()
{
char a[3];
strncpy(a,"1234567",9);//正常输出
//注意a size只有3,并且后面是const指针。 所以你要记住,内存是任意操作的(没有规矩) ; 但是用不同类型的指针去操作实际内存时即有不同的规矩
printf("%s/n",a);
static int tt;
tt=2;
cout<<tt<<ss<<endl;
/*int arr[2]={1,2};
int *p=arr;
cout<<*(p+0)<<*(p+1)<<endl;*/
int arr[2][3]={1,2,3,4,5};
int **p=(int **)arr;
for(int i=0;i<2;i++)
{ for(int j=0;j<3;j++)
cout<<*((p+i*3)+j)<<" ";
cout<<endl;
}
cout<<"/////////////////////"<<endl;
int fei=0x80000000;
cout<<fei<<endl;
a[0]='a'; //'A' 0x41 'a' 0x61
cout<<static_cast<int>(a[0])<<endl;
tt=0;
if(0)
printf("hello/n");
cout<<"//////////////////////"<<endl;
B bb;
bb.print();
C cc;
//cc.print(); 编译不通过,因为就算子类与父类函数签名不同,但是也不能重载,而是隐藏了。
cc.print(1);
cout<<__FILE__<<endl;
cout<<__LINE__<<endl; //牛逼
char dst1[100]="123",dst2[100]="sss";
my_strcat(dst2,my_strcat(dst1,"ABC"));
cout<<dst2<<endl;
int a1=1,a2=2;
int a3=(a1=1,a2=2);
cout<<a3<<endl;
cout<<endl<<endl;
cout<<sizeof(E)<<' '<<sizeof(F)<<' '<<sizeof(G)<<endl;
int dd;
scanf("%d",&dd);
return 0;
}
//类型安全,两个不同类型的指针之间可以强制转换 就不属于 类型安全?
//strlen 不算'/0',sizeof 算'/0' 所以常常差1
/*
extern 经典使用
// c语言头文件:cExample.h
#ifndef C_EXAMPLE_H
#define C_EXAMPLE_H
extern int add(int x,int y); //若c++文件中直接 include "cExample.h" 的话,那么这边使用 extern "C" int add(int x,int y); 即可
#endif
// c语言实现文件:cExample.c
#include "cExample.h"
int add( int x, int y )
{
return x + y;
}
// c++实现文件,调用add:cppFile.cpp
extern "C"
{
#include "cExample.h"
}
int main(int argc, char* argv[])
{
dd(2,3);
return 0;
}
*/