#include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> using namespace std; static int ss; 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; } */